5
5
"crypto/hmac"
6
6
"crypto/sha256"
7
7
"crypto/sha512"
8
+ "encoding/asn1"
8
9
"encoding/binary"
9
10
"hash"
10
11
"io"
@@ -95,6 +96,20 @@ func (id ParamID) UnmarshalBinaryPrivateKey(b []byte) (sign.PrivateKey, error) {
95
96
return & k , nil
96
97
}
97
98
99
+ func (id ParamID ) Oid () asn1.ObjectIdentifier {
100
+ // Source https://csrc.nist.gov/Projects/computer-security-objects-register/algorithm-registration
101
+ return asn1.ObjectIdentifier {
102
+ 2 , // joint-iso-ccitt(2)
103
+ 16 , // country(16)
104
+ 840 , // us(840)
105
+ 1 , // organization(1)
106
+ 101 , // gov(101)
107
+ 3 , // csor(3)
108
+ 4 , // nistAlgorithm(4)
109
+ id .params ().oid , // sigAlgs(oid)
110
+ }
111
+ }
112
+
98
113
// params contains all the relevant constants of a parameter set.
99
114
type params struct {
100
115
n uint32 // Length of WOTS+ messages.
@@ -107,22 +122,23 @@ type params struct {
107
122
isSHA2 bool // True, if the hash function is SHA2, otherwise is SHAKE.
108
123
name string // Name of the parameter set.
109
124
id ParamID // Identifier of the parameter set.
125
+ oid int // Object Identifier.
110
126
}
111
127
112
128
// Stores all the supported (read-only) parameter sets.
113
129
var supportedParams = [_MaxParams - 1 ]params {
114
- {id : ParamIDSHA2Small128 , n : 16 , h : 63 , d : 7 , hPrime : 9 , a : 12 , k : 14 , m : 30 , isSHA2 : true , name : "SLH-DSA-SHA2-128s" },
115
- {id : ParamIDSHAKESmall128 , n : 16 , h : 63 , d : 7 , hPrime : 9 , a : 12 , k : 14 , m : 30 , isSHA2 : false , name : "SLH-DSA-SHAKE-128s" },
116
- {id : ParamIDSHA2Fast128 , n : 16 , h : 66 , d : 22 , hPrime : 3 , a : 6 , k : 33 , m : 34 , isSHA2 : true , name : "SLH-DSA-SHA2-128f" },
117
- {id : ParamIDSHAKEFast128 , n : 16 , h : 66 , d : 22 , hPrime : 3 , a : 6 , k : 33 , m : 34 , isSHA2 : false , name : "SLH-DSA-SHAKE-128f" },
118
- {id : ParamIDSHA2Small192 , n : 24 , h : 63 , d : 7 , hPrime : 9 , a : 14 , k : 17 , m : 39 , isSHA2 : true , name : "SLH-DSA-SHA2-192s" },
119
- {id : ParamIDSHAKESmall192 , n : 24 , h : 63 , d : 7 , hPrime : 9 , a : 14 , k : 17 , m : 39 , isSHA2 : false , name : "SLH-DSA-SHAKE-192s" },
120
- {id : ParamIDSHA2Fast192 , n : 24 , h : 66 , d : 22 , hPrime : 3 , a : 8 , k : 33 , m : 42 , isSHA2 : true , name : "SLH-DSA-SHA2-192f" },
121
- {id : ParamIDSHAKEFast192 , n : 24 , h : 66 , d : 22 , hPrime : 3 , a : 8 , k : 33 , m : 42 , isSHA2 : false , name : "SLH-DSA-SHAKE-192f" },
122
- {id : ParamIDSHA2Small256 , n : 32 , h : 64 , d : 8 , hPrime : 8 , a : 14 , k : 22 , m : 47 , isSHA2 : true , name : "SLH-DSA-SHA2-256s" },
123
- {id : ParamIDSHAKESmall256 , n : 32 , h : 64 , d : 8 , hPrime : 8 , a : 14 , k : 22 , m : 47 , isSHA2 : false , name : "SLH-DSA-SHAKE-256s" },
124
- {id : ParamIDSHA2Fast256 , n : 32 , h : 68 , d : 17 , hPrime : 4 , a : 9 , k : 35 , m : 49 , isSHA2 : true , name : "SLH-DSA-SHA2-256f" },
125
- {id : ParamIDSHAKEFast256 , n : 32 , h : 68 , d : 17 , hPrime : 4 , a : 9 , k : 35 , m : 49 , isSHA2 : false , name : "SLH-DSA-SHAKE-256f" },
130
+ {id : ParamIDSHA2Small128 , n : 16 , h : 63 , d : 7 , hPrime : 9 , a : 12 , k : 14 , m : 30 , isSHA2 : true , oid : 20 , name : "SLH-DSA-SHA2-128s" },
131
+ {id : ParamIDSHAKESmall128 , n : 16 , h : 63 , d : 7 , hPrime : 9 , a : 12 , k : 14 , m : 30 , isSHA2 : false , oid : 26 , name : "SLH-DSA-SHAKE-128s" },
132
+ {id : ParamIDSHA2Fast128 , n : 16 , h : 66 , d : 22 , hPrime : 3 , a : 6 , k : 33 , m : 34 , isSHA2 : true , oid : 21 , name : "SLH-DSA-SHA2-128f" },
133
+ {id : ParamIDSHAKEFast128 , n : 16 , h : 66 , d : 22 , hPrime : 3 , a : 6 , k : 33 , m : 34 , isSHA2 : false , oid : 27 , name : "SLH-DSA-SHAKE-128f" },
134
+ {id : ParamIDSHA2Small192 , n : 24 , h : 63 , d : 7 , hPrime : 9 , a : 14 , k : 17 , m : 39 , isSHA2 : true , oid : 22 , name : "SLH-DSA-SHA2-192s" },
135
+ {id : ParamIDSHAKESmall192 , n : 24 , h : 63 , d : 7 , hPrime : 9 , a : 14 , k : 17 , m : 39 , isSHA2 : false , oid : 28 , name : "SLH-DSA-SHAKE-192s" },
136
+ {id : ParamIDSHA2Fast192 , n : 24 , h : 66 , d : 22 , hPrime : 3 , a : 8 , k : 33 , m : 42 , isSHA2 : true , oid : 23 , name : "SLH-DSA-SHA2-192f" },
137
+ {id : ParamIDSHAKEFast192 , n : 24 , h : 66 , d : 22 , hPrime : 3 , a : 8 , k : 33 , m : 42 , isSHA2 : false , oid : 29 , name : "SLH-DSA-SHAKE-192f" },
138
+ {id : ParamIDSHA2Small256 , n : 32 , h : 64 , d : 8 , hPrime : 8 , a : 14 , k : 22 , m : 47 , isSHA2 : true , oid : 24 , name : "SLH-DSA-SHA2-256s" },
139
+ {id : ParamIDSHAKESmall256 , n : 32 , h : 64 , d : 8 , hPrime : 8 , a : 14 , k : 22 , m : 47 , isSHA2 : false , oid : 30 , name : "SLH-DSA-SHAKE-256s" },
140
+ {id : ParamIDSHA2Fast256 , n : 32 , h : 68 , d : 17 , hPrime : 4 , a : 9 , k : 35 , m : 49 , isSHA2 : true , oid : 25 , name : "SLH-DSA-SHA2-256f" },
141
+ {id : ParamIDSHAKEFast256 , n : 32 , h : 68 , d : 17 , hPrime : 4 , a : 9 , k : 35 , m : 49 , isSHA2 : false , oid : 31 , name : "SLH-DSA-SHAKE-256f" },
126
142
}
127
143
128
144
// See FIPS-205, Section 11.1 and Section 11.2.
0 commit comments