Documentation
¶
Overview ¶
Package credsecret — ЕДИНСТВЕННОЕ объявленное место, где живёт форма базового удостоверения Kachō: чеканка строки, её разбор, вычисление и сверка контрольной суммы, вычисление хранимого хеша.
Приёмка BAT-1 §3.4 требует ровно одного объявления: чеканка в iam, полоса приёма на крае, полоса докера и гейт утёкшего креда зовут ЭТО место. Второй копии предиката не заводится ни в каком виде — ни своей регуляркой в гейте, ни разбором текста чужого исходника: копия разошлась бы молча и разошлась бы в сторону «принимаем больше», потому что расширять проще.
Форма (§3.1):
kacho_<id удостоверения>_<26 знаков крокфорда><6 знаков контрольной суммы>
Марка даёт сканеру утёкших кредов якорь и отличает наш вид ДО любого разбора; контрольная сумма отвергает опечатанный и обрезанный вход БЕЗ обращения к базе и БЕЗ обращения к авторитету (уровень 2 из трёх, §2.2).
Index ¶
- Constants
- Variables
- func HasMark(s string) bool
- func Hash(credentialID, secretPart string) []byte
- func Mint(credentialID string) (secret string, hash []byte, err error)
- func MintFrom(src io.Reader, credentialID string) (secret string, hash []byte, err error)
- func Pattern() *regexp.Regexp
- func Verify(credentialID, secretPart string, stored []byte) bool
- type Parsed
Constants ¶
const ( // Mark — марка продукта. Якорь сканера утёкших кредов; по ней и только по // ней выбирается полоса приёма (§5.1) — никогда по неудаче разбора другого // вида. Mark = "kacho_" // SecretPartLen — 26 знаков крокфорда = 130 бит из криптографического // источника. Энтропия — довод §2.1 (перебор невозможен арифметически, // поэтому медленной функции вывода ключа не вводится), а не украшение. SecretPartLen = 26 // ChecksumLen — 6 знаков крокфорда = 30 бит. ChecksumLen = 6 )
Variables ¶
var ErrMalformed = errors.New("credsecret: негодная форма базового удостоверения")
ErrMalformed — марка наша, форма негодна: длина, алфавит, разделитель или контрольная сумма. Наружу этот исход не различается (§10) — различимость живёт внутрь, в счётчиках.
var ErrNotOurLane = errors.New("credsecret: строка не несёт марки базового удостоверения")
ErrNotOurLane — строка не несёт нашей марки. Отдельный от ErrMalformed исход: «это не наша полоса» и «наша полоса, вход негоден» — разные вещи для классификатора приёма (§5.1), и слить их значило бы завести запасной путь, срабатывающий на неудаче.
Functions ¶
func HasMark ¶
HasMark отвечает, наша ли это полоса. Вызывается ПЕРВЫМ на пути приёма и ничего, кроме префикса, не смотрит: уровень 1 отсева (§2.2) стоит на пути каждого запроса и не вправе платить больше сравнения префикса.
func Hash ¶
Hash — то, что хранится: sha256 по идентификатору И секретной части вместе (§2.1). Половина одного удостоверения с половиной другого хешу не подходит — это следует из формы хеша, а не из проверки.
func Mint ¶
Mint чеканит строку для названного удостоверения и возвращает вместе с ней хеш, который единственно и хранится. Сам секрет не хранится нигде (§4.3).
func MintFrom ¶
MintFrom — Mint с названным источником случайности. Существует ради пробы BAT-1-08: сорванный источник обязан дать ОТКАЗ, а не строку предсказуемого вида. Прод-путь зовёт Mint.