DAT Go Library
Репозиторий
Пример: Сервис управления сертификатами DAT
init
go// logger example
opts := &slog.HandlerOptions{
Level: slog.LevelDebug,
}
testLogger := slog.New(slog.NewTextHandler(os.Stdout, opts))
builder, err := NewDatCmsManagerBuilder().
Url("http://localhost:8088")
if err != nil {
t.Fatal(err)
}
manager, err := builder.
// IntervalOff(). // disable auto sync
Interval(60 * time.Second).
Logger(testLogger).
Token("12345678901b").
Build()
if err != nil {
t.Fatalf("failed to build manager: %v", err)
}
// manual sync
// _ = manager.Sync()
issue / parse
goplain := "Unicode 유니코드 ユニコード 万国码 يونيكود यूनिकोड Юникод 🦄💻"
secure := "Ciphertext 암호문 暗号文 密文 Шифротекст Texte chiffré Geheimtext نص مشفر सिफरपाठ 🔐"
datStr, err := manager.Issue(plain, secure)
if err != nil {
return err
}
fmt.Printf("dat: %v\n", datStr)
payload, err := manager.Parse(datStr)
if err != nil {
return err
}
if plain != payload.PlainText() {
return fmt.Errorf("plain text mismatch: expected %q, got %q", plain, payload.PlainText())
}
if secure != payload.SecureText() {
return fmt.Errorf("secure text mismatch: expected %q, got %q", secure, payload.SecureText())
}
fmt.Printf("payload plain: %q\n", payload.PlainText())
fmt.Printf("payload secure: %q\n", payload.SecureText())
Пример: Ручная реализация
gomanager := dat.NewManager()
now := dat.NowUnixTimestamp()
cert, err := dat.GenerateCertificate(1, now-10, 610, 60, dat.EcdsaP256, dat.IvAes256Gcm)
if err != nil {
t.Fatal(err)
}
_, err = manager.ImportCertificates([]*dat.Certificate{cert}, false)
if err != nil {
t.Fatal(err)
}
plain := "Unicode 유니코드 ユニコード 万国码 يونيكود यूनिकोड Юникод 🦄💻"
secure := "Ciphertext 암호문 暗号文 密文 Шифротекст Texte chiffré Geheimtext نص مشفر सिफरपाठ 🔐"
datStr, err := manager.Issue(plain, secure)
if err != nil {
t.Fatal(err)
}
payload, err := manager.Parse(datStr)
if err != nil {
t.Fatal(err)
}
if payload.PlainText() != plain {
t.Errorf("expected plain %s, got %s", plain, payload.PlainText())
}
if payload.SecureText() != secure {
t.Errorf("expected secure %s, got %s", secure, payload.SecureText())
}
println(datStr)
println(payload.PlainText())
println(payload.SecureText())