Documentation ¶
Index ¶
- Constants
- Variables
- type Crypto
- type CryptoUC
- func (c *CryptoUC) ExecuteECDH(own *ecdh.PrivateKey, remoteBytes []byte) ([]byte, error)
- func (c *CryptoUC) GenerateECDHKey() (*ecdh.PrivateKey, error)
- func (c *CryptoUC) GetAddress(pubKeyBytes []byte) []byte
- func (c *CryptoUC) VerifyAddress(aesKey []byte, nonce []byte, sig []byte, pubKeyBytes []byte) error
- type Storage
- type StorageUC
- func (f *StorageUC) CanBeStored(fileName string, addr []byte) bool
- func (f *StorageUC) CheckExistence(fileName string) bool
- func (f *StorageUC) DeleteFile(fileName string, addr []byte) error
- func (f *StorageUC) GetAddress(contents []byte) []byte
- func (f *StorageUC) GetFileContents(contents []byte) []byte
- func (f *StorageUC) ReadFile(fileName string, addr []byte) ([]byte, error)
- func (f *StorageUC) StoreFile(fileName string, addr []byte, contents []byte) error
- func (f *StorageUC) VerifyFile(contents []byte, addr []byte) error
Constants ¶
const ( MAGIC_SIZE = 2 CRC32_SIZE = 4 ADDR_SIZE = 20 )
Variables ¶
var MAGIC = [2]byte{0xd1, 0x57}
Functions ¶
This section is empty.
Types ¶
type CryptoUC ¶
type CryptoUC struct { }
CryptoUC структура, методы которой отвечают за криптиграфию (генерацию ключей, проверку ЭП и т.д.)
func NewCryptoUC ¶
func NewCryptoUC() *CryptoUC
NewCryptoUC создает экземпляр структуры для дальнейшего использования
func (*CryptoUC) ExecuteECDH ¶
ExecuteECDH вычисляет общий секрет из собственного приватного ключа и предоставленного публичного ключа
func (*CryptoUC) GenerateECDHKey ¶
func (c *CryptoUC) GenerateECDHKey() (*ecdh.PrivateKey, error)
GenerateECDHKey генерирут приватный ключ для обмена диффи-хеллмана
func (*CryptoUC) GetAddress ¶
GetAddress получает адрес клиента из предоставленного публичного ключа
func (*CryptoUC) VerifyAddress ¶
VerifyAddress проверяет адрес клиента. Схема следующая:
Клиент локально генерирует последовательность из 16 байт (nonce);
Далее шифрует её при помоще AES в режиме ECB с ключем, полученным при помощи обмена диффи-хеллмана;
И затем берет от результата keccak256 хэш и подписывает его с помощью своего приватного ключа.
Клиент отправляет плеинтекст nonce, подпись, и, возможно, тело файла.
type Storage ¶
type Storage interface { VerifyFile(contents []byte, addr []byte) error ReadFile(fileName string, addr []byte) ([]byte, error) StoreFile(fileName string, addr []byte, contents []byte) error DeleteFile(fileName string, addr []byte) error GetAddress(contents []byte) []byte GetFileContents(contents []byte) []byte CheckExistence(fileName string) bool CanBeStored(fileName string, addr []byte) bool }
type StorageUC ¶
type StorageUC struct {
// contains filtered or unexported fields
}
StorageUC это юзкейс для работы с файловой системой
func NewStorageUC ¶
NewStorageUC создает экземпляр StorageUC для дальнейшей работы
func (*StorageUC) CanBeStored ¶
CanBeStored проверяет, может ли файл быть сохранен: либо такого файла не существует, либо он принадлежит тому же пользователю, что сохранял его до этого
func (*StorageUC) CheckExistence ¶
CheckExistence проверяет наличие файла с заданным именем в файловой системе
func (*StorageUC) DeleteFile ¶
DeleteFile удаляет файл из файловой системы устройства, предварительно проверяя его целостность
func (*StorageUC) GetAddress ¶
GetAddress получает адрес клиента, записанный в файле
func (*StorageUC) GetFileContents ¶
GetFileContents получает тело файла
func (*StorageUC) ReadFile ¶
ReadFile считывает файл из файловой системы и проверяет его целостность
func (*StorageUC) StoreFile ¶
StoreFile сохраняет файл в файловую систему устройства и дописывает в него служебную информацию
func (*StorageUC) VerifyFile ¶
VerifyFile проверяет целостность переданного содержимого файла
А именно,
1. Проверяет его длину 2. Проверяет magic в начале файла 3. Сверяет адрес, записанный в файле с переданным 4. Проверяет CRC32-чексумму в конце файла