credsecret

package
v1.4.0 Latest Latest
Warning

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

Go to latest
Published: Sep 10, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Overview

Package credsecret — ЕДИНСТВЕННОЕ объявленное место, где живёт форма базового удостоверения Kachō: чеканка строки, её разбор, вычисление и сверка контрольной суммы, вычисление хранимого хеша.

Приёмка BAT-1 §3.4 требует ровно одного объявления: чеканка в iam, полоса приёма на крае, полоса докера и гейт утёкшего креда зовут ЭТО место. Второй копии предиката не заводится ни в каком виде — ни своей регуляркой в гейте, ни разбором текста чужого исходника: копия разошлась бы молча и разошлась бы в сторону «принимаем больше», потому что расширять проще.

Форма (§3.1):

kacho_<id удостоверения>_<26 знаков крокфорда><6 знаков контрольной суммы>

Марка даёт сканеру утёкших кредов якорь и отличает наш вид ДО любого разбора; контрольная сумма отвергает опечатанный и обрезанный вход БЕЗ обращения к базе и БЕЗ обращения к авторитету (уровень 2 из трёх, §2.2).

Index

Constants

View Source
const (
	// Mark — марка продукта. Якорь сканера утёкших кредов; по ней и только по
	// ней выбирается полоса приёма (§5.1) — никогда по неудаче разбора другого
	// вида.
	Mark = "kacho_"

	// SecretPartLen — 26 знаков крокфорда = 130 бит из криптографического
	// источника. Энтропия — довод §2.1 (перебор невозможен арифметически,
	// поэтому медленной функции вывода ключа не вводится), а не украшение.
	SecretPartLen = 26

	// ChecksumLen — 6 знаков крокфорда = 30 бит.
	ChecksumLen = 6
)

Variables

View Source
var ErrMalformed = errors.New("credsecret: негодная форма базового удостоверения")

ErrMalformed — марка наша, форма негодна: длина, алфавит, разделитель или контрольная сумма. Наружу этот исход не различается (§10) — различимость живёт внутрь, в счётчиках.

View Source
var ErrNotOurLane = errors.New("credsecret: строка не несёт марки базового удостоверения")

ErrNotOurLane — строка не несёт нашей марки. Отдельный от ErrMalformed исход: «это не наша полоса» и «наша полоса, вход негоден» — разные вещи для классификатора приёма (§5.1), и слить их значило бы завести запасной путь, срабатывающий на неудаче.

Functions

func HasMark

func HasMark(s string) bool

HasMark отвечает, наша ли это полоса. Вызывается ПЕРВЫМ на пути приёма и ничего, кроме префикса, не смотрит: уровень 1 отсева (§2.2) стоит на пути каждого запроса и не вправе платить больше сравнения префикса.

func Hash

func Hash(credentialID, secretPart string) []byte

Hash — то, что хранится: sha256 по идентификатору И секретной части вместе (§2.1). Половина одного удостоверения с половиной другого хешу не подходит — это следует из формы хеша, а не из проверки.

func Mint

func Mint(credentialID string) (secret string, hash []byte, err error)

Mint чеканит строку для названного удостоверения и возвращает вместе с ней хеш, который единственно и хранится. Сам секрет не хранится нигде (§4.3).

func MintFrom

func MintFrom(src io.Reader, credentialID string) (secret string, hash []byte, err error)

MintFrom — Mint с названным источником случайности. Существует ради пробы BAT-1-08: сорванный источник обязан дать ОТКАЗ, а не строку предсказуемого вида. Прод-путь зовёт Mint.

func Pattern

func Pattern() *regexp.Regexp

Pattern возвращает предикат формы для сканера утёкших кредов. Ровно одно объявление на дерево (§3.4, BAT-1-65).

func Verify

func Verify(credentialID, secretPart string, stored []byte) bool

Verify сверяет предъявленную секретную часть с хранимым хешем за постоянное время.

Types

type Parsed

type Parsed struct {
	Mark         string
	CredentialID string
	SecretPart   string
	Checksum     string
}

Parsed — разобранная строка. Идентификатор дословно равен первичному ключу строки реестра: второго имени у удостоверения нет (§3.3).

func Parse

func Parse(s string) (Parsed, error)

Parse разбирает и проверяет форму, включая контрольную сумму. Обращения ни к базе, ни к авторитету не делает — это уровень 2 отсева.

Jump to

Keyboard shortcuts

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