mirror of
https://github.com/henrydcase/nobs.git
synced 2024-11-26 17:11:22 +00:00
77 lines
2.2 KiB
Go
77 lines
2.2 KiB
Go
package sidh
|
|
|
|
import . "github.com/henrydcase/nobs/dh/sidh/internal/p751"
|
|
|
|
type DomainParams struct {
|
|
// P, Q and R=P-Q base points
|
|
Affine_P, Affine_Q, Affine_R ExtensionFieldElement
|
|
// Max size of secret key for x-torsion group
|
|
SecretBitLen uint
|
|
// MaskBytes
|
|
MaskBytes []byte
|
|
// Size of a compuatation strategy for x-torsion group
|
|
IsogenyStrategy []uint32
|
|
}
|
|
|
|
type SidhParams struct {
|
|
Id PrimeFieldId
|
|
// The secret key size, in bytes.
|
|
SecretKeySize int
|
|
// The public key size, in bytes.
|
|
PublicKeySize int
|
|
// The shared secret size, in bytes.
|
|
SharedSecretSize uint
|
|
// 2- and 3-torsion group parameter definitions
|
|
A, B DomainParams
|
|
// Sample rate to obtain a value in [0,3^238]
|
|
SampleRate uint
|
|
// Length of SIKE secret message. Must be one of {24,32,40},
|
|
// depending on size of prime field used (see [SIKE], 1.4 and 5.1)
|
|
MsgLen uint
|
|
// Length of SIKE ephemeral KEM key (see [SIKE], 1.4 and 5.1)
|
|
KemSize uint
|
|
}
|
|
|
|
// Keeps mapping: SIDH prime field ID to domain parameters
|
|
var sidhParams = make(map[PrimeFieldId]SidhParams)
|
|
|
|
// Params returns domain parameters corresponding to finite field and identified by
|
|
// `id` provieded by the caller. Function panics in case `id` wasn't registered earlier.
|
|
func Params(id PrimeFieldId) *SidhParams {
|
|
if val, ok := sidhParams[id]; ok {
|
|
return &val
|
|
}
|
|
panic("sidh: SIDH Params ID unregistered")
|
|
}
|
|
|
|
func init() {
|
|
p751 := SidhParams{
|
|
Id: FP_751,
|
|
SecretKeySize: P751_SecretKeySize,
|
|
PublicKeySize: P751_PublicKeySize,
|
|
SharedSecretSize: P751_SharedSecretSize,
|
|
A: DomainParams{
|
|
Affine_P: P751_affine_PA,
|
|
Affine_Q: P751_affine_QA,
|
|
Affine_R: P751_affine_RA,
|
|
SecretBitLen: P751_SecretBitLenA,
|
|
MaskBytes: []byte{P751_MaskAliceByte1, P751_MaskAliceByte2, P751_MaskAliceByte3},
|
|
IsogenyStrategy: P751_AliceIsogenyStrategy[:],
|
|
},
|
|
B: DomainParams{
|
|
Affine_P: P751_affine_PB,
|
|
Affine_Q: P751_affine_QB,
|
|
Affine_R: P751_affine_RB,
|
|
SecretBitLen: P751_SecretBitLenB,
|
|
MaskBytes: []byte{P751_MaskBobByte},
|
|
IsogenyStrategy: P751_BobIsogenyStrategy[:],
|
|
},
|
|
MsgLen: 32,
|
|
// SIKEp751 provides 192 bit of classical security ([SIKE], 5.1)
|
|
KemSize: 24,
|
|
SampleRate: P751_SampleRate,
|
|
}
|
|
|
|
sidhParams[FP_751] = p751
|
|
}
|