github.com/maenmax/kairep@v0.0.0-20210218001208-55bf3df36788/src/golang.org/x/crypto/openpgp/packet/encrypted_key_test.go (about) 1 // Copyright 2011 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package packet 6 7 import ( 8 "bytes" 9 "crypto/rsa" 10 "encoding/hex" 11 "fmt" 12 "math/big" 13 "testing" 14 ) 15 16 func bigFromBase10(s string) *big.Int { 17 b, ok := new(big.Int).SetString(s, 10) 18 if !ok { 19 panic("bigFromBase10 failed") 20 } 21 return b 22 } 23 24 var encryptedKeyPub = rsa.PublicKey{ 25 E: 65537, 26 N: bigFromBase10("115804063926007623305902631768113868327816898845124614648849934718568541074358183759250136204762053879858102352159854352727097033322663029387610959884180306668628526686121021235757016368038585212410610742029286439607686208110250133174279811431933746643015923132833417396844716207301518956640020862630546868823"), 27 } 28 29 var encryptedKeyRSAPriv = &rsa.PrivateKey{ 30 PublicKey: encryptedKeyPub, 31 D: bigFromBase10("32355588668219869544751561565313228297765464314098552250409557267371233892496951383426602439009993875125222579159850054973310859166139474359774543943714622292329487391199285040721944491839695981199720170366763547754915493640685849961780092241140181198779299712578774460837139360803883139311171713302987058393"), 32 } 33 34 var encryptedKeyPriv = &PrivateKey{ 35 PublicKey: PublicKey{ 36 PubKeyAlgo: PubKeyAlgoRSA, 37 }, 38 PrivateKey: encryptedKeyRSAPriv, 39 } 40 41 func TestDecryptingEncryptedKey(t *testing.T) { 42 const encryptedKeyHex = "c18c032a67d68660df41c70104005789d0de26b6a50c985a02a13131ca829c413a35d0e6fa8d6842599252162808ac7439c72151c8c6183e76923fe3299301414d0c25a2f06a2257db3839e7df0ec964773f6e4c4ac7ff3b48c444237166dd46ba8ff443a5410dc670cb486672fdbe7c9dfafb75b4fea83af3a204fe2a7dfa86bd20122b4f3d2646cbeecb8f7be8" 43 const expectedKeyHex = "d930363f7e0308c333b9618617ea728963d8df993665ae7be1092d4926fd864b" 44 45 p, err := Read(readerFromHex(encryptedKeyHex)) 46 if err != nil { 47 t.Errorf("error from Read: %s", err) 48 return 49 } 50 ek, ok := p.(*EncryptedKey) 51 if !ok { 52 t.Errorf("didn't parse an EncryptedKey, got %#v", p) 53 return 54 } 55 56 if ek.KeyId != 0x2a67d68660df41c7 || ek.Algo != PubKeyAlgoRSA { 57 t.Errorf("unexpected EncryptedKey contents: %#v", ek) 58 return 59 } 60 61 err = ek.Decrypt(encryptedKeyPriv, nil) 62 if err != nil { 63 t.Errorf("error from Decrypt: %s", err) 64 return 65 } 66 67 if ek.CipherFunc != CipherAES256 { 68 t.Errorf("unexpected EncryptedKey contents: %#v", ek) 69 return 70 } 71 72 keyHex := fmt.Sprintf("%x", ek.Key) 73 if keyHex != expectedKeyHex { 74 t.Errorf("bad key, got %s want %x", keyHex, expectedKeyHex) 75 } 76 } 77 78 func TestEncryptingEncryptedKey(t *testing.T) { 79 key := []byte{1, 2, 3, 4} 80 const expectedKeyHex = "01020304" 81 const keyId = 42 82 83 pub := &PublicKey{ 84 PublicKey: &encryptedKeyPub, 85 KeyId: keyId, 86 PubKeyAlgo: PubKeyAlgoRSAEncryptOnly, 87 } 88 89 buf := new(bytes.Buffer) 90 err := SerializeEncryptedKey(buf, pub, CipherAES128, key, nil) 91 if err != nil { 92 t.Errorf("error writing encrypted key packet: %s", err) 93 } 94 95 p, err := Read(buf) 96 if err != nil { 97 t.Errorf("error from Read: %s", err) 98 return 99 } 100 ek, ok := p.(*EncryptedKey) 101 if !ok { 102 t.Errorf("didn't parse an EncryptedKey, got %#v", p) 103 return 104 } 105 106 if ek.KeyId != keyId || ek.Algo != PubKeyAlgoRSAEncryptOnly { 107 t.Errorf("unexpected EncryptedKey contents: %#v", ek) 108 return 109 } 110 111 err = ek.Decrypt(encryptedKeyPriv, nil) 112 if err != nil { 113 t.Errorf("error from Decrypt: %s", err) 114 return 115 } 116 117 if ek.CipherFunc != CipherAES128 { 118 t.Errorf("unexpected EncryptedKey contents: %#v", ek) 119 return 120 } 121 122 keyHex := fmt.Sprintf("%x", ek.Key) 123 if keyHex != expectedKeyHex { 124 t.Errorf("bad key, got %s want %x", keyHex, expectedKeyHex) 125 } 126 } 127 128 func TestSerializingEncryptedKey(t *testing.T) { 129 const encryptedKeyHex = "c18c032a67d68660df41c70104005789d0de26b6a50c985a02a13131ca829c413a35d0e6fa8d6842599252162808ac7439c72151c8c6183e76923fe3299301414d0c25a2f06a2257db3839e7df0ec964773f6e4c4ac7ff3b48c444237166dd46ba8ff443a5410dc670cb486672fdbe7c9dfafb75b4fea83af3a204fe2a7dfa86bd20122b4f3d2646cbeecb8f7be8" 130 131 p, err := Read(readerFromHex(encryptedKeyHex)) 132 if err != nil { 133 t.Fatalf("error from Read: %s", err) 134 } 135 ek, ok := p.(*EncryptedKey) 136 if !ok { 137 t.Fatalf("didn't parse an EncryptedKey, got %#v", p) 138 } 139 140 var buf bytes.Buffer 141 ek.Serialize(&buf) 142 143 if bufHex := hex.EncodeToString(buf.Bytes()); bufHex != encryptedKeyHex { 144 t.Fatalf("serialization of encrypted key differed from original. Original was %s, but reserialized as %s", encryptedKeyHex, bufHex) 145 } 146 }