Protocol: freeze device proof and browser CSRF contracts
This commit is contained in:
@@ -4,6 +4,7 @@ package protocol
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"encoding/binary"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
@@ -5564,6 +5565,30 @@ func EncodeVersionNegotiation(value VersionNegotiation) ([]byte, error) {
|
||||
return json.Marshal(value)
|
||||
}
|
||||
|
||||
func DeviceRegistrationProofTranscript(serverID, principalID, deviceID, challenge []byte, expiryUnixMilliseconds int64) ([]byte, error) {
|
||||
for _, value := range []struct {
|
||||
field string
|
||||
bytes []byte
|
||||
length int
|
||||
}{{"server_id", serverID, 16}, {"principal_id", principalID, 16}, {"device_id", deviceID, 16}, {"challenge", challenge, 32}} {
|
||||
if len(value.bytes) != value.length {
|
||||
return nil, ValidationError{Violations: []FieldViolation{{Field: value.field, Code: "invalid_length"}}}
|
||||
}
|
||||
}
|
||||
if expiryUnixMilliseconds < 0 {
|
||||
return nil, ValidationError{Violations: []FieldViolation{{Field: "expiry_unix_milliseconds", Code: "minimum"}}}
|
||||
}
|
||||
transcript := make([]byte, 0, 112)
|
||||
transcript = append(transcript, "versevdi-device-proof-v1"...)
|
||||
transcript = append(transcript, serverID...)
|
||||
transcript = append(transcript, principalID...)
|
||||
transcript = append(transcript, deviceID...)
|
||||
transcript = append(transcript, challenge...)
|
||||
var expiry [8]byte
|
||||
binary.BigEndian.PutUint64(expiry[:], uint64(expiryUnixMilliseconds))
|
||||
return append(transcript, expiry[:]...), nil
|
||||
}
|
||||
|
||||
var ErrNoCapabilityOverlap = errors.New("no capability overlap")
|
||||
|
||||
func IntersectCapabilityProfiles(profiles ...CapabilityProfile) (CapabilityProfile, error) {
|
||||
|
||||
Reference in New Issue
Block a user