X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=gost3410%2Fvko2001.go;h=0bb8e3d93699546724398eb218214aaf6128ba0a;hb=d681002980ca0b115936a6e217de5649bb8966d3;hp=c9aeada21a90a36f782a49497aaa8c4af347a813;hpb=9f3355e3239fed2b0110b0724e7ba1ed509b8a19;p=gogost.git diff --git a/gost3410/vko2001.go b/gost3410/vko2001.go index c9aeada..0bb8e3d 100644 --- a/gost3410/vko2001.go +++ b/gost3410/vko2001.go @@ -1,5 +1,5 @@ // GoGOST -- Pure Go GOST cryptographic functions library -// Copyright (C) 2015-2020 Sergey Matveev +// Copyright (C) 2015-2024 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 @@ -17,25 +17,26 @@ package gost3410 import ( "errors" + "fmt" "math/big" - "go.cypherpunks.ru/gogost/v4/gost28147" - "go.cypherpunks.ru/gogost/v4/gost341194" + "go.cypherpunks.ru/gogost/v5/gost28147" + "go.cypherpunks.ru/gogost/v5/gost341194" ) // RFC 4357 VKO GOST R 34.10-2001 key agreement function. // UKM is user keying material, also called VKO-factor. func (prv *PrivateKey) KEK2001(pub *PublicKey, ukm *big.Int) ([]byte, error) { - if prv.Mode != Mode2001 { - return nil, errors.New("gogost/gost3410: KEK2001 can not be used in Mode2012") + if prv.C.PointSize() != 32 { + return nil, errors.New("gogost/gost3410: KEK2001 is only for 256-bit curves") } key, err := prv.KEK(pub, ukm) if err != nil { - return nil, err + return nil, fmt.Errorf("gogost/gost3410.PrivateKey.KEK2001: %w", err) } h := gost341194.New(&gost28147.SboxIdGostR341194CryptoProParamSet) if _, err = h.Write(key); err != nil { - return nil, err + return nil, fmt.Errorf("gogost/gost3410.PrivateKey.KEK2001: %w", err) } return h.Sum(key[:0]), nil }