blob: aba2628c42e119ae8573c86c9627e1556844d0c1 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package crypto implements encryption and decryption interfaces intended for
// securing communication over VCs.
package crypto
import "v.io/x/ref/runtime/internal/lib/iobuf"
type Encrypter interface {
// Encrypt encrypts the provided plaintext data and returns the
// corresponding ciphertext slice (or nil if an error is returned).
//
// It always calls Release on plaintext and thus plaintext should not
// be used after calling Encrypt.
Encrypt(plaintext *iobuf.Slice) (ciphertext *iobuf.Slice, err error)
}
type Decrypter interface {
// Decrypt decrypts the provided ciphertext slice and returns the
// corresponding plaintext (or nil if an error is returned).
//
// It always calls Release on ciphertext and thus ciphertext should not
// be used after calling Decrypt.
Decrypt(ciphertext *iobuf.Slice) (plaintext *iobuf.Slice, err error)
}
type Crypter interface {
Encrypter
Decrypter
// ChannelBinding returns a byte slice that is unique for the the
// particular crypter (and the parties between which it is operating).
// Having both parties assert out of the band that they are indeed
// participating in a connection with that channel binding value is
// sufficient to authenticate the data received through the crypter.
ChannelBinding() []byte
String() string
}