Private key completely works. Can read BIND9 files

This commit is contained in:
Miek Gieben 2011-01-17 19:52:28 +01:00
parent ea08cb2d7b
commit 1f6a221bd8
3 changed files with 53 additions and 12 deletions

View File

@ -453,18 +453,17 @@ func (k *RR_DNSKEY) setPubKeyRSA(_E int, _N *big.Int) {
// Set the public key (the value E and N)
func exponentToBuf(_E int) []byte {
var buf []byte
if _E < 256 {
buf = make([]byte, 2)
buf[0] = 1
buf[1] = uint8(_E)
} else {
buf = make([]byte, 3)
i := big.NewInt(int64(_E))
i := big.NewInt(int64(_E))
if len(i.Bytes()) < 256 {
buf = make([]byte, 1)
buf[0] = uint8(len(i.Bytes()))
} else {
buf = make([]byte, 3)
buf[0] = 0
buf[1] = uint8(len(i.Bytes()) << 8)
buf[1] = uint8(len(i.Bytes()) >> 8)
buf[2] = uint8(len(i.Bytes()))
buf = append(buf, i.Bytes()...)
}
buf = append(buf, i.Bytes()...)
return buf
}

View File

@ -122,7 +122,6 @@ func (k *RR_DNSKEY) PrivateKeySetString(s string) (PrivateKey, os.Error) {
return nil, &Error{Error: "incorrect algorithm"}
}
k.Algorithm = uint8(a)
k.Protocol = 3
case "Modulus:", "PublicExponent:", "PrivateExponent:", "Prime1:", "Prime2:":
v, err := packBase64([]byte(right))
if err != nil {
@ -133,7 +132,10 @@ func (k *RR_DNSKEY) PrivateKeySetString(s string) (PrivateKey, os.Error) {
p.PublicKey.N.SetBytes(v)
}
if left == "PublicExponent:" {
p.PublicKey.E, _ = strconv.Atoi(string(v))
i := big.NewInt(0)
i.SetBytes(v)
// Int64 should be large enough
p.PublicKey.E = int(i.Int64())
}
if left == "PrivateExponent:" {
p.D = big.NewInt(0)

View File

@ -24,7 +24,7 @@ func TestConversion(t *testing.T) {
*/
}
func TestPrivateKeyRead(t *testing.T) {
func TestPrivateKeyRead1(t *testing.T) {
a:=`Private-key-format: v1.3
Algorithm: 5 (RSASHA1)
Modulus: vyVjCzz87g3rg9vDj1NJ1tlFP7lEY2pEQLkWGXAFuZM6Fw/bNmEH/z3ybDfsJqx4QQ6YZXN8V2kbzY7oX+tExf6AMiMIcKYzEGwg5xBYFh33du4G+6kE/VzG906ubpaIEnrZOMTdGqE7OwptAqrqXe4uGXY99ZqNdqutOKQyIzs=
@ -44,3 +44,43 @@ Activate: 20101221142359`
p = p
fmt.Printf("%v\n", k)
}
func TestPrivateKeyRead2(t *testing.T) {
b:=`; This is a zone-signing key, keyid 41946, for miek.nl.
; Created: 20110109154937 (Sun Jan 9 16:49:37 2011)
; Publish: 20110109154937 (Sun Jan 9 16:49:37 2011)
; Activate: 20110109154937 (Sun Jan 9 16:49:37 2011)
miek.nl. IN DNSKEY 256 3 5 AwEAAeETsGZdYlTsHK8wc1yo9Zcj4dMEpPWRTYuTmGD3e4Qsk4/uyKf5jhsNZhp8no7GKHTEe7+K1prC4iXo3X5oQyDDmx76hDo5u6fblu/XaQw16wqMDQDPiURUKkzobJlmY6fYNKRz7A01J73V6qDMCvlk+8p+fb0a+LiJ2NJDACln`
b = b
a:=`Private-key-format: v1.3
Algorithm: 5 (RSASHA1)
Modulus: 4ROwZl1iVOwcrzBzXKj1lyPh0wSk9ZFNi5OYYPd7hCyTj+7Ip/mOGw1mGnyejsYodMR7v4rWmsLiJejdfmhDIMObHvqEOjm7p9uW79dpDDXrCowNAM+JRFQqTOhsmWZjp9g0pHPsDTUnvdXqoMwK+WT7yn59vRr4uInY0kMAKWc=
PublicExponent: AQAB
PrivateExponent: CYYAv8QRxhAbgpolN3V6tsNw6bHXnQBh7Jb5KpkuI8CTGdL7sIfRqHlfqZ0+REJEMfSiW89vFytJ0FrTDGcy99qesJujW/tlfsThRTwFSXdCNv0Df25CNNNeskMg3r86is8MmHJc+dAjN3P0ArAF2yZd9gS7C4TGKDDR3bZ9SYk=
Prime1: 8EO3P0cYdR8FISxLaUVfVJVIVAWux7tptnqZlzAmomPGEipXr2bAYf637hAAoD8xEUXbI6FIkXUk5vIjxfUjRQ==
Prime2: 79FWWF5PNh6ykof9NsrR2YRy/P30iLbzfSRVQrrYH15SEip5LUN15W/G7bg5Uyp8U/o3HXaaxhrj9LC330Uuuw==
Exponent1: mtOIKoauBAtRSuc4UUYbAG6ShVKEJsFmhejLQNoOi2awJNSUXLtiDcQO0qINRTZzcCYL6RHtqY5LkWdIFjC54Q==
Exponent2: ZpsiXly7d2Ra8ubMKA1PC8nniOb/IR9lvj01XX+jyIgKhUs23W7nmmrgqgUQQc0DtMpxmmGMhwYqUh7qDNUE0Q==
Coefficient: 2wn6uW28qM6B68m1ADcLmzjwIQn9Xyc/JMydrJUSzwG7Fr08bc1aa1+K/K0pVy82vU5emDKdVXPP4+WtqXnUNA==
Created: 20110109154937
Publish: 20110109154937
Activate: 20110109154937`
k := new(RR_DNSKEY)
k.Hdr.Rrtype = TypeDNSKEY
k.Hdr.Class = ClassINET
k.Hdr.Name = "miek.nl."
k.Protocol = 3
k.Flags = 256
p, _ := k.PrivateKeySetString(a)
p = p
fmt.Printf("New key %v\n", k)
fmt.Printf("Keytag %d", k.KeyTag())
if k.KeyTag() != 41946 {
t.Log("Keytag should be 41946")
t.Fail()
}
}