Encrypt data with public key
(data []byte)
| 100 | |
| 101 | // Encrypt data with public key |
| 102 | func (k *PublicKey) Encrypt(data []byte) ([]byte, error) { |
| 103 | seckey, _ := ecdsa.GenerateKey(k.Curve, rand.Reader) |
| 104 | Z, _ := calcSharedKey(seckey, &k.PublicKey) |
| 105 | X := elliptic.Marshal(k.Curve, seckey.X, seckey.Y) |
| 106 | K := x963KDF(Z, X, sha256.New) |
| 107 | key := K[:eciesKeyLen] |
| 108 | nonce := K[eciesKeyLen:] |
| 109 | block, _ := aes.NewCipher(key) |
| 110 | aesgcm, _ := cipher.NewGCMWithNonceSize(block, eciesKeyLen) |
| 111 | cipherData := aesgcm.Seal(nil, nonce, data, nil) |
| 112 | return append(X, cipherData...), nil |
| 113 | } |
| 114 | |
| 115 | // GetPublicKey from secret key |
| 116 | func (k *SecretKey) GetPublicKey() *PublicKey { |