// Package prekey provides prekey bundle structures for calculating // a new Signal session with a user asyncronously. package prekey import ( "go.mau.fi/libsignal/ecc" "go.mau.fi/libsignal/keys/identity" "go.mau.fi/libsignal/util/optional" ) // NewBundle returns a Bundle structure that contains a remote PreKey // and collection of associated items. func NewBundle(registrationID, deviceID uint32, preKeyID *optional.Uint32, signedPreKeyID uint32, preKeyPublic, signedPreKeyPublic ecc.ECPublicKeyable, signedPreKeySig [64]byte, identityKey *identity.Key) *Bundle { bundle := Bundle{ registrationID: registrationID, deviceID: deviceID, preKeyID: preKeyID, preKeyPublic: preKeyPublic, signedPreKeyID: signedPreKeyID, signedPreKeyPublic: signedPreKeyPublic, signedPreKeySignature: signedPreKeySig, identityKey: identityKey, } return &bundle } // Bundle is a structure that contains a remote PreKey and collection // of associated items. type Bundle struct { registrationID uint32 deviceID uint32 preKeyID *optional.Uint32 preKeyPublic ecc.ECPublicKeyable signedPreKeyID uint32 signedPreKeyPublic ecc.ECPublicKeyable signedPreKeySignature [64]byte identityKey *identity.Key } // DeviceID returns the device ID this PreKey belongs to. func (b *Bundle) DeviceID() uint32 { return b.deviceID } // PreKeyID returns the unique key ID for this PreKey. func (b *Bundle) PreKeyID() *optional.Uint32 { return b.preKeyID } // PreKey returns the public key for this PreKey. func (b *Bundle) PreKey() ecc.ECPublicKeyable { return b.preKeyPublic } // SignedPreKeyID returns the unique key ID for this // signed PreKey. func (b *Bundle) SignedPreKeyID() uint32 { return b.signedPreKeyID } // SignedPreKey returns the signed PreKey for this // PreKeyBundle. func (b *Bundle) SignedPreKey() ecc.ECPublicKeyable { return b.signedPreKeyPublic } // SignedPreKeySignature returns the signature over the // signed PreKey. func (b *Bundle) SignedPreKeySignature() [64]byte { return b.signedPreKeySignature } // IdentityKey returns the Identity Key of this PreKey's owner. func (b *Bundle) IdentityKey() *identity.Key { return b.identityKey } // RegistrationID returns the registration ID associated with // this PreKey. func (b *Bundle) RegistrationID() uint32 { return b.registrationID }