more parsing: from private key file - not finished

This commit is contained in:
Miek Gieben 2011-01-16 16:22:31 +01:00
parent 2b4ac48354
commit 8ed6c8a8f4
4 changed files with 65 additions and 3 deletions

4
TODO
View File

@ -1,9 +1,9 @@
Todo:
Short term:
* NSEC3 - need base32 for Nsec3
* Parsing from strings, going with goyacc and own lexer
* Testsuite - make it slightly better - put multiple tests inside 1 file
* Cleanup the code
* Tsig testing
* Parsing from strings, going with goyacc and own lexer
Issues:
* escaped dots in names \.

View File

@ -210,6 +210,8 @@ func TestTag(t *testing.T) {
}
func TestKeyGenRSA(t *testing.T) {
return // Tijdelijk uit TODO(mg)
key := new(RR_DNSKEY)
key.Hdr.Name = "miek.nl."
key.Hdr.Rrtype = TypeDNSKEY

View File

@ -2,8 +2,9 @@ package dns
import (
"os"
"strconv"
"big"
"fmt"
"strconv"
"crypto/rsa"
"crypto/rand"
)
@ -105,3 +106,37 @@ func (r *RR_DNSKEY) PrivateKeyString(p PrivateKey) (s string) {
}
return
}
// Read a private key file and create a public key and
// return a private key
func (r *RR_DNSKEY) PrivateKeySetString(s string) (PrivateKey, os.Error) {
p := new(rsa.PrivateKey)
var left, right string
// Do we care about the order of things?
n, err := fmt.Sscanf(s, "%s %s\n", &left, &right)
n = n
err = err
switch left {
case "Private-key-format:":
if right != "v1.3" {
return nil, &Error{Error: "v1.3 supported"}
}
case "Algorithm:":
// simple switch on the string
case "Modulus:":
modulus, err := packBase64([]byte(right))
if err != nil {
return nil, err
}
p.PublicKey.N.SetBytes(modulus)
/*
case "PublicExponent":
publicExponent, err := packBase64([]byte(right))
if err != nil {
return nil,err
}
t.PublicKey.E = int(publicExponent)
*/
}
return p, nil
}

View File

@ -22,3 +22,28 @@ func TestConversion(t *testing.T) {
println(SecondsToString(60)) // 1m
println(SecondsToString(59)) // 59
}
func TestPrivateKeyRead(t *testing.T) {
a:=`Private-key-format: v1.3
Algorithm: 5 (RSASHA1)
Modulus: vyVjCzz87g3rg9vDj1NJ1tlFP7lEY2pEQLkWGXAFuZM6Fw/bNmEH/z3ybDfsJqx4QQ6YZXN8V2kbzY7oX+tExf6AMiMIcKYzEGwg5xBYFh33du4G+6kE/VzG906ubp
aIEnrZOMTdGqE7OwptAqrqXe4uGXY99ZqNdqutOKQyIzs=
PublicExponent: AQAB
PrivateExponent: PFg/RoMAjt8SJVSyDoOK4itBs3Z34rLfzVchZPJ6vDWAt1soJ6jGb4xNBmE5SpRUeqVy80RcUvQ59NFTB0UtNo/zAXhC1RfKiFCNRFTyV3k6a9CMLPAU9g
4peW91lw87HXnYALTC9bTiTAoMU3vKvNx80F5qfK7qY/N28S1PMeE=
Prime1: +vPWyp37iUa7/LbhejOX/KdkhfwECUCdJF0uEePjaBCSf85xceEBzU89JFk9dCojtVqcI8xLKnRKRixg07Rc+Q==
Prime2: wv2aVWr13Cq2vRkKiHlqqP9vihGuDN/kWfmXb7slJH3s2i9+yI7vepAlow9SY8lNHOqXibEaAFsP3aj5OAAS0w==
Exponent1: sChCenBzhWV1yGvH0zQsWFpYogTKAISuyjvufvhtRTt82uJbmAjObwRUcxOBo+2Aq2kzeZ2Klf6TtLaqMXHGYQ==
Exponent2: hXiKeAWrHXWveGj3qMtTkzKl6uCHPxDSgjQy0KxNlFkOE5uHMUmF62NYH/GQ9/UG79A0wm+T2MJ8bcIINaj3OQ==
Coefficient: xzZBvs2/IT7+iRQdn9I4slRTg9ryIecx7oKEKYTOEeyL2qq7rfY/FwZGy3EqyA/3lrkfFLx76qOeqAmCTUaU4w==
Created: 20101221142359
Publish: 20101221142359
Activate: 20101221142359`
a = a
b := "Private-key-format: v1.3"
k := new(RR_DNSKEY)
p,_ := k.PrivateKeySetString(b)
p = p
}