diff options
| author | Adam Langley <agl@golang.org> | 2011-06-21 21:00:49 -0400 |
|---|---|---|
| committer | Adam Langley <agl@golang.org> | 2011-06-21 21:00:49 -0400 |
| commit | f2e94de6d62be39044b28ca61b8659cd295253c2 (patch) | |
| tree | 84c849976f554ba61599c666faf2dfbdfdcdd6f8 /src/pkg/crypto/openpgp/packet/private_key.go | |
| parent | 10b5519d3a15e9489c998a720fe19989af89da11 (diff) | |
| download | go-f2e94de6d62be39044b28ca61b8659cd295253c2.tar.xz | |
crypto/openpgp: add ElGamal support.
R=bradfitz, r
CC=golang-dev
https://golang.org/cl/4639049
Diffstat (limited to 'src/pkg/crypto/openpgp/packet/private_key.go')
| -rw-r--r-- | src/pkg/crypto/openpgp/packet/private_key.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/pkg/crypto/openpgp/packet/private_key.go b/src/pkg/crypto/openpgp/packet/private_key.go index 6244661320..6f8133d981 100644 --- a/src/pkg/crypto/openpgp/packet/private_key.go +++ b/src/pkg/crypto/openpgp/packet/private_key.go @@ -9,6 +9,7 @@ import ( "bytes" "crypto/cipher" "crypto/dsa" + "crypto/openpgp/elgamal" "crypto/openpgp/error" "crypto/openpgp/s2k" "crypto/rsa" @@ -224,6 +225,8 @@ func (pk *PrivateKey) parsePrivateKey(data []byte) (err os.Error) { return pk.parseRSAPrivateKey(data) case PubKeyAlgoDSA: return pk.parseDSAPrivateKey(data) + case PubKeyAlgoElGamal: + return pk.parseElGamalPrivateKey(data) } panic("impossible") } @@ -277,3 +280,22 @@ func (pk *PrivateKey) parseDSAPrivateKey(data []byte) (err os.Error) { return nil } + +func (pk *PrivateKey) parseElGamalPrivateKey(data []byte) (err os.Error) { + pub := pk.PublicKey.PublicKey.(*elgamal.PublicKey) + priv := new(elgamal.PrivateKey) + priv.PublicKey = *pub + + buf := bytes.NewBuffer(data) + x, _, err := readMPI(buf) + if err != nil { + return + } + + priv.X = new(big.Int).SetBytes(x) + pk.PrivateKey = priv + pk.Encrypted = false + pk.encryptedData = nil + + return nil +} |
