| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package rpc
-
- import (
- "bytes"
- "errors"
- "fmt"
- )
-
- type NonceResponse struct {
- NonceRequest
-
- Type []byte
- Crypto []byte
- }
-
- // Bytes returns serialized form of the nonce response.
- func (r *NonceResponse) Bytes() []byte {
- buf := bytes.Buffer{}
-
- buf.Write(r.Type)
- buf.Write(r.KeySelector)
- buf.Write(r.Crypto)
- buf.Write(r.CryptoTS)
- buf.Write(r.Nonce)
-
- return buf.Bytes()
- }
-
- func (r *NonceResponse) Valid(req *NonceRequest) error {
- if !bytes.Equal(r.Type, TagNonce) {
- return errors.New("unexpected RPC type")
- }
-
- if !bytes.Equal(r.Crypto, NonceCryptoAES) {
- return errors.New("unexpected crypto type")
- }
-
- if !bytes.Equal(r.KeySelector, req.KeySelector) {
- return errors.New("unexpected key selector")
- }
-
- return nil
- }
-
- // NewNonceResponse build new nonce response based on the given data.
- func NewNonceResponse(data []byte) (*NonceResponse, error) {
- if len(data) != 32 {
- return nil, fmt.Errorf("unexpected message length %d", len(data))
- }
-
- return &NonceResponse{
- NonceRequest: NonceRequest{
- KeySelector: data[4:8],
- CryptoTS: data[12:16],
- Nonce: data[16:],
- },
- Type: data[:4],
- Crypto: data[8:12],
- }, nil
- }
|