Fix nonce validation

The attestation certificate contains the nonce as raw bytes in the
extension 1.2.840.113635.100.8.11.1
pull/1040/head
Mariano Cano 2 years ago
parent e02a190fa7
commit 2ab1e6658e

@ -346,12 +346,10 @@ func deviceAttest01Validate(ctx context.Context, ch *Challenge, db DB, jwk *jose
return err return err
} }
// Validate nonce with SHA-256 of the token // Validate nonce with SHA-256 of the token.
// if len(data.Nonce) != 0 {
// TODO(mariano): validate this
if data.Nonce != "" {
sum := sha256.Sum256([]byte(ch.Token)) sum := sha256.Sum256([]byte(ch.Token))
if data.Nonce != hex.EncodeToString(sum[:]) { if subtle.ConstantTimeCompare(data.Nonce, sum[:]) != 1 {
return storeError(ctx, db, ch, true, NewError(ErrorBadAttestationStatement, "challenge token does not match")) return storeError(ctx, db, ch, true, NewError(ErrorBadAttestationStatement, "challenge token does not match"))
} }
} }
@ -408,7 +406,7 @@ var (
) )
type appleAttestationData struct { type appleAttestationData struct {
Nonce string Nonce []byte
SerialNumber string SerialNumber string
UDID string UDID string
SEPVersion string SEPVersion string
@ -474,7 +472,7 @@ func doAppleAttestationFormat(ctx context.Context, ch *Challenge, db DB, att *At
case ext.Id.Equal(oidAppleSecureEnclaveProcessorOSVersion): case ext.Id.Equal(oidAppleSecureEnclaveProcessorOSVersion):
data.SEPVersion = string(ext.Value) data.SEPVersion = string(ext.Value)
case ext.Id.Equal(oidAppleNonce): case ext.Id.Equal(oidAppleNonce):
data.Nonce = string(ext.Value) data.Nonce = ext.Value
} }
} }

Loading…
Cancel
Save