usecase

package
v0.0.0-...-c0380af Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 15, 2023 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MAGIC_SIZE = 2
	CRC32_SIZE = 4
	ADDR_SIZE  = 20
)

Variables

View Source
var MAGIC = [2]byte{0xd1, 0x57}

Functions

This section is empty.

Types

type Crypto

type Crypto interface {
	GenerateECDHKey() (*ecdh.PrivateKey, error)
	ExecuteECDH(own *ecdh.PrivateKey, remoteBytes []byte) ([]byte, error)
	VerifyAddress(aesKey []byte, nonce []byte, sig []byte, pubKeyBytes []byte) error
	GetAddress(pubKeyBytes []byte) []byte
}

type CryptoUC

type CryptoUC struct {
}

CryptoUC структура, методы которой отвечают за криптиграфию (генерацию ключей, проверку ЭП и т.д.)

func NewCryptoUC

func NewCryptoUC() *CryptoUC

NewCryptoUC создает экземпляр структуры для дальнейшего использования

func (*CryptoUC) ExecuteECDH

func (c *CryptoUC) ExecuteECDH(own *ecdh.PrivateKey, remoteBytes []byte) ([]byte, error)

ExecuteECDH вычисляет общий секрет из собственного приватного ключа и предоставленного публичного ключа

func (*CryptoUC) GenerateECDHKey

func (c *CryptoUC) GenerateECDHKey() (*ecdh.PrivateKey, error)

GenerateECDHKey генерирут приватный ключ для обмена диффи-хеллмана

func (*CryptoUC) GetAddress

func (c *CryptoUC) GetAddress(pubKeyBytes []byte) []byte

GetAddress получает адрес клиента из предоставленного публичного ключа

func (*CryptoUC) VerifyAddress

func (c *CryptoUC) VerifyAddress(aesKey []byte, nonce []byte, sig []byte, pubKeyBytes []byte) error

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

func NewStorageUC(basePath string) *StorageUC

NewStorageUC создает экземпляр StorageUC для дальнейшей работы

func (*StorageUC) CanBeStored

func (f *StorageUC) CanBeStored(fileName string, addr []byte) bool

CanBeStored проверяет, может ли файл быть сохранен: либо такого файла не существует, либо он принадлежит тому же пользователю, что сохранял его до этого

func (*StorageUC) CheckExistence

func (f *StorageUC) CheckExistence(fileName string) bool

CheckExistence проверяет наличие файла с заданным именем в файловой системе

func (*StorageUC) DeleteFile

func (f *StorageUC) DeleteFile(fileName string, addr []byte) error

DeleteFile удаляет файл из файловой системы устройства, предварительно проверяя его целостность

func (*StorageUC) GetAddress

func (f *StorageUC) GetAddress(contents []byte) []byte

GetAddress получает адрес клиента, записанный в файле

func (*StorageUC) GetFileContents

func (f *StorageUC) GetFileContents(contents []byte) []byte

GetFileContents получает тело файла

func (*StorageUC) ReadFile

func (f *StorageUC) ReadFile(fileName string, addr []byte) ([]byte, error)

ReadFile считывает файл из файловой системы и проверяет его целостность

func (*StorageUC) StoreFile

func (f *StorageUC) StoreFile(fileName string, addr []byte, contents []byte) error

StoreFile сохраняет файл в файловую систему устройства и дописывает в него служебную информацию

func (*StorageUC) VerifyFile

func (f *StorageUC) VerifyFile(contents []byte, addr []byte) error

VerifyFile проверяет целостность переданного содержимого файла

А именно,

1. Проверяет его длину 2. Проверяет magic в начале файла 3. Сверяет адрес, записанный в файле с переданным 4. Проверяет CRC32-чексумму в конце файла

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL