|
6 | 6 | "crypto/cipher"
|
7 | 7 | "crypto/ecdh"
|
8 | 8 | "crypto/ecdsa"
|
9 |
| - "crypto/elliptic" |
10 | 9 | "crypto/rsa"
|
11 | 10 | "crypto/sha256"
|
12 | 11 | "crypto/x509"
|
@@ -117,27 +116,26 @@ func NewECDecryptor(sk *ecdh.PrivateKey) (ECDecryptor, error) {
|
117 | 116 | func (e ECDecryptor) Decrypt(wrapped []byte) ([]byte, error) {
|
118 | 117 | var ek *ecdh.PublicKey
|
119 | 118 | var wv ecWrappedValue
|
| 119 | + var pubFromDSN any |
120 | 120 |
|
121 | 121 | if rest, err := asn1.Unmarshal(wrapped, &wv); err != nil {
|
122 | 122 | return nil, fmt.Errorf("asn1.Unmarshal failure: %w", err)
|
123 | 123 | } else if len(rest) > 0 {
|
124 | 124 | return nil, errors.New("trailing data")
|
125 |
| - } else { |
126 |
| - if pubFromDSN, err := x509.ParsePKIXPublicKey(wv.EphemeralKey); err != nil { |
127 |
| - return nil, fmt.Errorf("ecdh failure: %w", err) |
128 |
| - } else { |
129 |
| - switch pubFromDSN := pubFromDSN.(type) { |
130 |
| - case *ecdsa.PublicKey: |
131 |
| - ek, err = ConvertToECDHPublicKey(pubFromDSN) |
132 |
| - if err != nil { |
133 |
| - return nil, fmt.Errorf("ecdh conversion failure: %w", err) |
134 |
| - } |
135 |
| - case *ecdh.PublicKey: |
136 |
| - ek = pubFromDSN |
137 |
| - default: |
138 |
| - return nil, errors.New("not an supported type of public key") |
139 |
| - } |
| 125 | + } else if pubFromDSN, err = x509.ParsePKIXPublicKey(wv.EphemeralKey); err != nil { |
| 126 | + return nil, fmt.Errorf("ecdh failure: %w", err) |
| 127 | + } |
| 128 | + switch pubFromDSN := pubFromDSN.(type) { |
| 129 | + case *ecdsa.PublicKey: |
| 130 | + var err error |
| 131 | + ek, err = ConvertToECDHPublicKey(pubFromDSN) |
| 132 | + if err != nil { |
| 133 | + return nil, fmt.Errorf("ecdh conversion failure: %w", err) |
140 | 134 | }
|
| 135 | + case *ecdh.PublicKey: |
| 136 | + ek = pubFromDSN |
| 137 | + default: |
| 138 | + return nil, errors.New("not an supported type of public key") |
141 | 139 | }
|
142 | 140 |
|
143 | 141 | ikm, err := e.sk.ECDH(ek)
|
@@ -176,16 +174,3 @@ func (e ECDecryptor) Decrypt(wrapped []byte) ([]byte, error) {
|
176 | 174 |
|
177 | 175 | return plaintext, nil
|
178 | 176 | }
|
179 |
| - |
180 |
| -func convCurve(c ecdh.Curve) elliptic.Curve { |
181 |
| - switch c { |
182 |
| - case ecdh.P256(): |
183 |
| - return elliptic.P256() |
184 |
| - case ecdh.P384(): |
185 |
| - return elliptic.P384() |
186 |
| - case ecdh.P521(): |
187 |
| - return elliptic.P521() |
188 |
| - default: |
189 |
| - return nil |
190 |
| - } |
191 |
| -} |
0 commit comments