Help us shape the future of Go! Take the 2026 Go Developer Survey

credsecret

package
v1.16.0 Latest Latest
Warning

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

Go to latest
Published: Oct 30, 2026 License: Apache-2.0 Imports: 9 Imported by: 1

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