github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/protocol/keybase1/crypto.go (about)

     1  // Auto-generated to Go types and interfaces using avdl-compiler v1.4.10 (https://github.com/keybase/node-avdl-compiler)
     2  //   Input file: avdl/keybase1/crypto.avdl
     3  
     4  package keybase1
     5  
     6  import (
     7  	"github.com/keybase/go-framed-msgpack-rpc/rpc"
     8  	context "golang.org/x/net/context"
     9  	"time"
    10  )
    11  
    12  type ED25519PublicKey [32]byte
    13  
    14  func (o ED25519PublicKey) DeepCopy() ED25519PublicKey {
    15  	var ret ED25519PublicKey
    16  	copy(ret[:], o[:])
    17  	return ret
    18  }
    19  
    20  type ED25519Signature [64]byte
    21  
    22  func (o ED25519Signature) DeepCopy() ED25519Signature {
    23  	var ret ED25519Signature
    24  	copy(ret[:], o[:])
    25  	return ret
    26  }
    27  
    28  type ED25519SignatureInfo struct {
    29  	Sig       ED25519Signature `codec:"sig" json:"sig"`
    30  	PublicKey ED25519PublicKey `codec:"publicKey" json:"publicKey"`
    31  }
    32  
    33  func (o ED25519SignatureInfo) DeepCopy() ED25519SignatureInfo {
    34  	return ED25519SignatureInfo{
    35  		Sig:       o.Sig.DeepCopy(),
    36  		PublicKey: o.PublicKey.DeepCopy(),
    37  	}
    38  }
    39  
    40  type EncryptedBytes32 [48]byte
    41  
    42  func (o EncryptedBytes32) DeepCopy() EncryptedBytes32 {
    43  	var ret EncryptedBytes32
    44  	copy(ret[:], o[:])
    45  	return ret
    46  }
    47  
    48  type BoxNonce [24]byte
    49  
    50  func (o BoxNonce) DeepCopy() BoxNonce {
    51  	var ret BoxNonce
    52  	copy(ret[:], o[:])
    53  	return ret
    54  }
    55  
    56  type BoxPublicKey [32]byte
    57  
    58  func (o BoxPublicKey) DeepCopy() BoxPublicKey {
    59  	var ret BoxPublicKey
    60  	copy(ret[:], o[:])
    61  	return ret
    62  }
    63  
    64  type CiphertextBundle struct {
    65  	Kid        KID              `codec:"kid" json:"kid"`
    66  	Ciphertext EncryptedBytes32 `codec:"ciphertext" json:"ciphertext"`
    67  	Nonce      BoxNonce         `codec:"nonce" json:"nonce"`
    68  	PublicKey  BoxPublicKey     `codec:"publicKey" json:"publicKey"`
    69  }
    70  
    71  func (o CiphertextBundle) DeepCopy() CiphertextBundle {
    72  	return CiphertextBundle{
    73  		Kid:        o.Kid.DeepCopy(),
    74  		Ciphertext: o.Ciphertext.DeepCopy(),
    75  		Nonce:      o.Nonce.DeepCopy(),
    76  		PublicKey:  o.PublicKey.DeepCopy(),
    77  	}
    78  }
    79  
    80  type UnboxAnyRes struct {
    81  	Kid       KID     `codec:"kid" json:"kid"`
    82  	Plaintext Bytes32 `codec:"plaintext" json:"plaintext"`
    83  	Index     int     `codec:"index" json:"index"`
    84  }
    85  
    86  func (o UnboxAnyRes) DeepCopy() UnboxAnyRes {
    87  	return UnboxAnyRes{
    88  		Kid:       o.Kid.DeepCopy(),
    89  		Plaintext: o.Plaintext.DeepCopy(),
    90  		Index:     o.Index,
    91  	}
    92  }
    93  
    94  type SignED25519Arg struct {
    95  	SessionID int    `codec:"sessionID" json:"sessionID"`
    96  	Msg       []byte `codec:"msg" json:"msg"`
    97  	Reason    string `codec:"reason" json:"reason"`
    98  }
    99  
   100  type SignED25519ForKBFSArg struct {
   101  	SessionID int    `codec:"sessionID" json:"sessionID"`
   102  	Msg       []byte `codec:"msg" json:"msg"`
   103  	Reason    string `codec:"reason" json:"reason"`
   104  }
   105  
   106  type SignToStringArg struct {
   107  	SessionID int    `codec:"sessionID" json:"sessionID"`
   108  	Msg       []byte `codec:"msg" json:"msg"`
   109  	Reason    string `codec:"reason" json:"reason"`
   110  }
   111  
   112  type UnboxBytes32Arg struct {
   113  	SessionID        int              `codec:"sessionID" json:"sessionID"`
   114  	EncryptedBytes32 EncryptedBytes32 `codec:"encryptedBytes32" json:"encryptedBytes32"`
   115  	Nonce            BoxNonce         `codec:"nonce" json:"nonce"`
   116  	PeersPublicKey   BoxPublicKey     `codec:"peersPublicKey" json:"peersPublicKey"`
   117  	Reason           string           `codec:"reason" json:"reason"`
   118  }
   119  
   120  type UnboxBytes32AnyArg struct {
   121  	SessionID   int                `codec:"sessionID" json:"sessionID"`
   122  	Bundles     []CiphertextBundle `codec:"bundles" json:"bundles"`
   123  	Reason      string             `codec:"reason" json:"reason"`
   124  	PromptPaper bool               `codec:"promptPaper" json:"promptPaper"`
   125  }
   126  
   127  type CryptoInterface interface {
   128  	// Sign the given message (which should be small) using the device's private
   129  	// signing ED25519 key, and return the signature as well as the corresponding
   130  	// public key that can be used to verify the signature. The 'reason' parameter
   131  	// is used as part of the SecretEntryArg object passed into
   132  	// secretUi.getSecret().
   133  	SignED25519(context.Context, SignED25519Arg) (ED25519SignatureInfo, error)
   134  	// Same as the above except a KBFS-specific prefix is added to the payload to be signed.
   135  	SignED25519ForKBFS(context.Context, SignED25519ForKBFSArg) (ED25519SignatureInfo, error)
   136  	// Same as the above except the full marshaled and encoded NaclSigInfo.
   137  	SignToString(context.Context, SignToStringArg) (string, error)
   138  	// Decrypt exactly 32 bytes using nacl/box with the given nonce, the given
   139  	// peer's public key, and the device's private encryption key, and return the
   140  	// decrypted data. The 'reason' parameter is used as part of the
   141  	// SecretEntryArg object passed into secretUi.getSecret().
   142  	UnboxBytes32(context.Context, UnboxBytes32Arg) (Bytes32, error)
   143  	UnboxBytes32Any(context.Context, UnboxBytes32AnyArg) (UnboxAnyRes, error)
   144  }
   145  
   146  func CryptoProtocol(i CryptoInterface) rpc.Protocol {
   147  	return rpc.Protocol{
   148  		Name: "keybase.1.crypto",
   149  		Methods: map[string]rpc.ServeHandlerDescription{
   150  			"signED25519": {
   151  				MakeArg: func() interface{} {
   152  					var ret [1]SignED25519Arg
   153  					return &ret
   154  				},
   155  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   156  					typedArgs, ok := args.(*[1]SignED25519Arg)
   157  					if !ok {
   158  						err = rpc.NewTypeError((*[1]SignED25519Arg)(nil), args)
   159  						return
   160  					}
   161  					ret, err = i.SignED25519(ctx, typedArgs[0])
   162  					return
   163  				},
   164  			},
   165  			"signED25519ForKBFS": {
   166  				MakeArg: func() interface{} {
   167  					var ret [1]SignED25519ForKBFSArg
   168  					return &ret
   169  				},
   170  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   171  					typedArgs, ok := args.(*[1]SignED25519ForKBFSArg)
   172  					if !ok {
   173  						err = rpc.NewTypeError((*[1]SignED25519ForKBFSArg)(nil), args)
   174  						return
   175  					}
   176  					ret, err = i.SignED25519ForKBFS(ctx, typedArgs[0])
   177  					return
   178  				},
   179  			},
   180  			"signToString": {
   181  				MakeArg: func() interface{} {
   182  					var ret [1]SignToStringArg
   183  					return &ret
   184  				},
   185  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   186  					typedArgs, ok := args.(*[1]SignToStringArg)
   187  					if !ok {
   188  						err = rpc.NewTypeError((*[1]SignToStringArg)(nil), args)
   189  						return
   190  					}
   191  					ret, err = i.SignToString(ctx, typedArgs[0])
   192  					return
   193  				},
   194  			},
   195  			"unboxBytes32": {
   196  				MakeArg: func() interface{} {
   197  					var ret [1]UnboxBytes32Arg
   198  					return &ret
   199  				},
   200  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   201  					typedArgs, ok := args.(*[1]UnboxBytes32Arg)
   202  					if !ok {
   203  						err = rpc.NewTypeError((*[1]UnboxBytes32Arg)(nil), args)
   204  						return
   205  					}
   206  					ret, err = i.UnboxBytes32(ctx, typedArgs[0])
   207  					return
   208  				},
   209  			},
   210  			"unboxBytes32Any": {
   211  				MakeArg: func() interface{} {
   212  					var ret [1]UnboxBytes32AnyArg
   213  					return &ret
   214  				},
   215  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   216  					typedArgs, ok := args.(*[1]UnboxBytes32AnyArg)
   217  					if !ok {
   218  						err = rpc.NewTypeError((*[1]UnboxBytes32AnyArg)(nil), args)
   219  						return
   220  					}
   221  					ret, err = i.UnboxBytes32Any(ctx, typedArgs[0])
   222  					return
   223  				},
   224  			},
   225  		},
   226  	}
   227  }
   228  
   229  type CryptoClient struct {
   230  	Cli rpc.GenericClient
   231  }
   232  
   233  // Sign the given message (which should be small) using the device's private
   234  // signing ED25519 key, and return the signature as well as the corresponding
   235  // public key that can be used to verify the signature. The 'reason' parameter
   236  // is used as part of the SecretEntryArg object passed into
   237  // secretUi.getSecret().
   238  func (c CryptoClient) SignED25519(ctx context.Context, __arg SignED25519Arg) (res ED25519SignatureInfo, err error) {
   239  	err = c.Cli.Call(ctx, "keybase.1.crypto.signED25519", []interface{}{__arg}, &res, 0*time.Millisecond)
   240  	return
   241  }
   242  
   243  // Same as the above except a KBFS-specific prefix is added to the payload to be signed.
   244  func (c CryptoClient) SignED25519ForKBFS(ctx context.Context, __arg SignED25519ForKBFSArg) (res ED25519SignatureInfo, err error) {
   245  	err = c.Cli.Call(ctx, "keybase.1.crypto.signED25519ForKBFS", []interface{}{__arg}, &res, 0*time.Millisecond)
   246  	return
   247  }
   248  
   249  // Same as the above except the full marshaled and encoded NaclSigInfo.
   250  func (c CryptoClient) SignToString(ctx context.Context, __arg SignToStringArg) (res string, err error) {
   251  	err = c.Cli.Call(ctx, "keybase.1.crypto.signToString", []interface{}{__arg}, &res, 0*time.Millisecond)
   252  	return
   253  }
   254  
   255  // Decrypt exactly 32 bytes using nacl/box with the given nonce, the given
   256  // peer's public key, and the device's private encryption key, and return the
   257  // decrypted data. The 'reason' parameter is used as part of the
   258  // SecretEntryArg object passed into secretUi.getSecret().
   259  func (c CryptoClient) UnboxBytes32(ctx context.Context, __arg UnboxBytes32Arg) (res Bytes32, err error) {
   260  	err = c.Cli.Call(ctx, "keybase.1.crypto.unboxBytes32", []interface{}{__arg}, &res, 0*time.Millisecond)
   261  	return
   262  }
   263  
   264  func (c CryptoClient) UnboxBytes32Any(ctx context.Context, __arg UnboxBytes32AnyArg) (res UnboxAnyRes, err error) {
   265  	err = c.Cli.Call(ctx, "keybase.1.crypto.unboxBytes32Any", []interface{}{__arg}, &res, 0*time.Millisecond)
   266  	return
   267  }