|
@@ -47,6 +47,13 @@ func NewDSAPrivateKey(currentTime time.Time, priv *dsa.PrivateKey) *PrivateKey {
|
|
|
return pk
|
|
return pk
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func NewElGamalPrivateKey(currentTime time.Time, priv *elgamal.PrivateKey) *PrivateKey {
|
|
|
|
|
+ pk := new(PrivateKey)
|
|
|
|
|
+ pk.PublicKey = *NewElGamalPublicKey(currentTime, &priv.PublicKey)
|
|
|
|
|
+ pk.PrivateKey = priv
|
|
|
|
|
+ return pk
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func (pk *PrivateKey) parse(r io.Reader) (err error) {
|
|
func (pk *PrivateKey) parse(r io.Reader) (err error) {
|
|
|
err = (&pk.PublicKey).parse(r)
|
|
err = (&pk.PublicKey).parse(r)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -130,6 +137,8 @@ func (pk *PrivateKey) Serialize(w io.Writer) (err error) {
|
|
|
err = serializeRSAPrivateKey(privateKeyBuf, priv)
|
|
err = serializeRSAPrivateKey(privateKeyBuf, priv)
|
|
|
case *dsa.PrivateKey:
|
|
case *dsa.PrivateKey:
|
|
|
err = serializeDSAPrivateKey(privateKeyBuf, priv)
|
|
err = serializeDSAPrivateKey(privateKeyBuf, priv)
|
|
|
|
|
+ case *elgamal.PrivateKey:
|
|
|
|
|
+ err = serializeElGamalPrivateKey(privateKeyBuf, priv)
|
|
|
default:
|
|
default:
|
|
|
err = errors.InvalidArgumentError("unknown private key type")
|
|
err = errors.InvalidArgumentError("unknown private key type")
|
|
|
}
|
|
}
|
|
@@ -185,6 +194,10 @@ func serializeDSAPrivateKey(w io.Writer, priv *dsa.PrivateKey) error {
|
|
|
return writeBig(w, priv.X)
|
|
return writeBig(w, priv.X)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func serializeElGamalPrivateKey(w io.Writer, priv *elgamal.PrivateKey) error {
|
|
|
|
|
+ return writeBig(w, priv.X)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// Decrypt decrypts an encrypted private key using a passphrase.
|
|
// Decrypt decrypts an encrypted private key using a passphrase.
|
|
|
func (pk *PrivateKey) Decrypt(passphrase []byte) error {
|
|
func (pk *PrivateKey) Decrypt(passphrase []byte) error {
|
|
|
if !pk.Encrypted {
|
|
if !pk.Encrypted {
|