X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=cmd%2Fcer-dane-hash%2Fmain.go;fp=cmd%2Fcer-dane-hash%2Fmain.go;h=5486a54d2853eaeeecf7531d835a6c65f8e8025c;hb=76f8a1d0d9e3ea4fd16a0fe19d00e073a333da74;hp=0000000000000000000000000000000000000000;hpb=cbf2e9df315b52e968c304d54371b57c6a40ec32;p=gogost.git diff --git a/cmd/cer-dane-hash/main.go b/cmd/cer-dane-hash/main.go new file mode 100644 index 0000000..5486a54 --- /dev/null +++ b/cmd/cer-dane-hash/main.go @@ -0,0 +1,47 @@ +// GoGOST -- Pure Go GOST cryptographic functions library +// Copyright (C) 2015-2023 Sergey Matveev +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// DANE's SPKI hash calculator +package main + +import ( + "crypto/sha256" + "crypto/x509" + "encoding/hex" + "encoding/pem" + "flag" + "fmt" + "io" + "log" + "os" +) + +func main() { + flag.Parse() + data, err := io.ReadAll(os.Stdin) + if err != nil { + log.Fatalln(err) + } + b, _ := pem.Decode(data) + if b == nil || b.Type != "CERTIFICATE" { + log.Fatalln("no CERTIFICATE") + } + cer, err := x509.ParseCertificate(b.Bytes) + if err != nil { + log.Fatalln(err) + } + h := sha256.Sum256(cer.RawSubjectPublicKeyInfo) + fmt.Println(hex.EncodeToString(h[:])) +}