From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1mY6XT-000459-LC for mharc-grub-devel@gnu.org; Wed, 06 Oct 2021 09:00:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39856) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mY6XF-00040W-0C for grub-devel@gnu.org; Wed, 06 Oct 2021 09:00:39 -0400 Received: from m12-14.163.com ([220.181.12.14]:33993) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mY6X2-0002uq-Kk for grub-devel@gnu.org; Wed, 06 Oct 2021 09:00:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:Mime-Version:Message-ID; bh=pl9HR hAVfNn8BWrx+WsvVYdMsMrNky++ulrc+V99jUA=; b=TdLAj8E3cylZpU6KvBw+6 do7y0GlSfqWTDLhNaWS7rk3Xy3G27huMlDg56T+speW+ssvKdG5C+iIrGqcEFv2W lRSs4qa44xTIRzRPB6HjT+PV4PNRKxzxVipbwng93SaIeALNiQU45nNBVbBBihHV 2+Wq3rxFe5no9dwxvZ/sBQ= Received: from DESKTOP-P4A613O (unknown [117.89.17.20]) by smtp10 (Coremail) with SMTP id DsCowAAH98TYnV1hhN6CLQ--.35135S2; Wed, 06 Oct 2021 21:00:09 +0800 (CST) Date: Wed, 6 Oct 2021 21:00:09 +0800 From: "bit_coffee@163.com" To: grub-devel Subject: A new parameter is added for grub-mkpasswd-pbkdf2 tool to specify a specific salt value. X-Priority: 3 X-Has-Attach: no X-Mailer: Foxmail 7.2.15.80[cn] Mime-Version: 1.0 Message-ID: <202110062100077339362@163.com> Content-Type: multipart/alternative; boundary="----=_001_NextPart214483541105_=----" X-CM-TRANSID: DsCowAAH98TYnV1hhN6CLQ--.35135S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxWF1DZF1UJr4rur1DGF1kuFg_yoWrCr43pa 1Fy34Y9F4kAFW7G39xJr1ft34fGa4SvF4UAw4ayF15AF4xWa4kKr18KFy09r45Wr48GFyU ZF4SyFWruFsIyaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07UPWrZUUUUU= X-Originating-IP: [117.89.17.20] X-CM-SenderInfo: 5elwsu5riivvi6rwjhhfrp/1tbiKRkkn1Xl2AxZggAAs0 Received-SPF: pass client-ip=220.181.12.14; envelope-from=bit_coffee@163.com; helo=m12-14.163.com X-Spam_score_int: -2 X-Spam_score: -0.3 X-Spam_bar: / X-Spam_report: (-0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, MIME_BASE64_TEXT=1.741, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Oct 2021 13:00:39 -0000 This is a multi-part message in MIME format. ------=_001_NextPart214483541105_=---- Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: base64 RnJvbSAwODkyYjc5MzM5Y2QwYWI5MzY0MmE2ZTVkMWIyNDBiY2ZjYWU1NDcxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogbGl1eGluIDxiaXRfY29mZmVlQDE2My5jb20+DQpEYXRlOiBX ZWQsIDYgT2N0IDIwMjEgMjA6NDU6MjggKzA4MDANClN1YmplY3Q6IFtQQVRDSF0gQSBuZXcgcGFy YW1ldGVyIGlzIGFkZGVkIGZvciBncnViLW1rcGFzc3dkLXBia2RmMiB0b29sIHRvIA0Kc3BlY2lm eSBhIHNwZWNpZmljIHNhbHQgdmFsdWUuDQoNCiBBZnRlciBhIHNwZWNpZmljIHNhbHQgdmFsdWUg aXMgc3BlY2lmaWVkLCB0aGUgb3V0cHV0IHBhc3N3b3JkDQogaXMgdGhlIHNhbWUgZXZlcnkgdGlt ZS4gSXQgaXMgY29udmVuaWVudCBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb2YgdGhlDQogcmVs ZWFzZSB2ZXJzaW9uIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGZvciBwYXNzd29yZCB2ZXJpZmljYXRp b24uDQoNCi0tLQ0KIHV0aWwvZ3J1Yi1ta3Bhc3N3ZC1wYmtkZjIuYyB8IDg4ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0NCiAxIGZpbGUgY2hhbmdlZCwgODUgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL3V0aWwvZ3J1Yi1ta3Bhc3N3ZC1w YmtkZjIuYyBiL3V0aWwvZ3J1Yi1ta3Bhc3N3ZC1wYmtkZjIuYw0KaW5kZXggNTgwNWYzYzEwLi40 Y2U5ZDIxYTQgMTAwNjQ0DQotLS0gYS91dGlsL2dydWItbWtwYXNzd2QtcGJrZGYyLmMNCisrKyBi L3V0aWwvZ3J1Yi1ta3Bhc3N3ZC1wYmtkZjIuYw0KQEAgLTMzLDYgKzMzLDkgQEANCiANCiAjZGVm aW5lIF9HTlVfU09VUkNFIDENCiANCisjZGVmaW5lIEdSVUJfUEFSQU1fU1VDQ0VTUyAwDQorI2Rl ZmluZSBHUlVCX1BBUkFNX0VSUk9SICAgMQ0KKw0KICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdu b3JlZCAiLVdtaXNzaW5nLXByb3RvdHlwZXMiDQogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v cmVkICItV21pc3NpbmctZGVjbGFyYXRpb25zIg0KICNpbmNsdWRlIDxhcmdwLmg+DQpAQCAtNDYs NiArNDksNyBAQCBzdGF0aWMgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9IHsNCiAgIHsi aXRlcmF0aW9uLWNvdW50IiwgICdjJywgTl8oIk5VTSIpLCAwLCBOXygiTnVtYmVyIG9mIFBCS0RG MiBpdGVyYXRpb25zIiksIDB9LA0KICAgeyJidWZsZW4iLCAgJ2wnLCBOXygiTlVNIiksIDAsIE5f KCJMZW5ndGggb2YgZ2VuZXJhdGVkIGhhc2giKSwgMH0sDQogICB7InNhbHQiLCAgJ3MnLCBOXygi TlVNIiksIDAsIE5fKCJMZW5ndGggb2Ygc2FsdCIpLCAwfSwNCisgIHsic2FsdCBhcmciLCAnYScs IE5fKCJWQVJDSEFSIiksIDAsIE5fKCJwcmVzZXQgc2FsdCB2YXIoaGV4IGNvZGUpIiksIDB9LA0K ICAgeyAwLCAwLCAwLCAwLCAwLCAwIH0NCiB9Ow0KIA0KQEAgLTU0LDggKzU4LDQ4IEBAIHN0cnVj dCBhcmd1bWVudHMNCiAgIHVuc2lnbmVkIGludCBjb3VudDsNCiAgIHVuc2lnbmVkIGludCBidWZs ZW47DQogICB1bnNpZ25lZCBpbnQgc2FsdGxlbjsNCisgIGNoYXIgKnNhbHQ7DQogfTsNCiANCitz dGF0aWMgaW50DQoraWxsZWdhbF9jaGFyKGNoYXIgdCkNCit7DQorICBjaGFyIGxlZ2Fsc3RyW10g PSAiMDEyMzQ1Njc4OUFCQ0RFRiI7DQorICBmb3IgKGludCBpID0gMDsgaSA8IGdydWJfc3RybGVu KGxlZ2Fsc3RyKTsgKytpKQ0KKyAgICB7DQorICAgICAgaWYgKHQgPT0gbGVnYWxzdHJbaV0pDQor IHJldHVybiBHUlVCX1BBUkFNX1NVQ0NFU1M7DQorICAgIH0NCisgIHJldHVybiBHUlVCX1BBUkFN X0VSUk9SOw0KK30NCisNCitzdGF0aWMgaW50DQorY2hlY2tfc2FsdF92ZXJpZnkoY29uc3QgY2hh ciAqYXJnKQ0KK3sNCisgIGdydWJfc2l6ZV90IGxlbiA9IGdydWJfc3RybGVuKGFyZyk7DQorICBp ZiAobGVuIDw9IDAgfHwgbGVuID49IEdSVUJfU0laRV9NQVgpDQorICAgIHsNCisgICAgICBmcHJp bnRmIChzdGRlcnIsIF8oInNhbHQgbGVuZ3RoIG1heSBiZSBlbXB0eSBvciB0b28gbG9uZyFcbiIp KTsNCisgICAgICByZXR1cm4gR1JVQl9QQVJBTV9FUlJPUjsNCisgICAgfQ0KKyAgaWYgKGxlbiAl IDIgIT0wKQ0KKyAgICB7DQorICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJ0aGUgc2FsdCB2YWx1 ZSBsZW5ndGggaXMgYW4gZXZlbiBudW1iZXIhXG4iKSk7DQorICAgICAgcmV0dXJuIEdSVUJfUEFS QU1fRVJST1I7DQorICAgIH0NCisgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpDQorICAg IHsNCisgICAgICBpZihpbGxlZ2FsX2NoYXIoYXJnW2ldKSkNCisgew0KKyAgZnByaW50ZiAoc3Rk ZXJyLA0KKyAgICBfKCJvbmx5IGhleGFkZWNpbWFsIG51bWJlcnMgY29uc2lzdGluZyBvZiAiIFwN CisgICAgImRpZ2l0cyBhbmQgdXBwZXJjYXNlIGxldHRlcnMgYXJlIHN1cHBvcnRlZFxuIikpOw0K KyAgICAgICAgICByZXR1cm4gR1JVQl9QQVJBTV9FUlJPUjsNCisgfQ0KKyAgICB9DQorICByZXR1 cm4gR1JVQl9QQVJBTV9TVUNDRVNTOw0KK30NCisNCiBzdGF0aWMgZXJyb3JfdA0KIGFyZ3BfcGFy c2VyIChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkNCiB7DQpA QCAtNzYsNiArMTIwLDEyIEBAIGFyZ3BfcGFyc2VyIChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVj dCBhcmdwX3N0YXRlICpzdGF0ZSkNCiAgICAgY2FzZSAncyc6DQogICAgICAgYXJndW1lbnRzLT5z YWx0bGVuID0gc3RydG91bCAoYXJnLCBOVUxMLCAwKTsNCiAgICAgICBicmVhazsNCisgICAgY2Fz ZSAnYSc6DQorICAgICAgaWYgKGNoZWNrX3NhbHRfdmVyaWZ5KGFyZykpDQorIHJldHVybiBBUkdQ X0VSUl9VTktOT1dOOw0KKyAgICAgIGFyZ3VtZW50cy0+c2FsdGxlbiA9IGdydWJfc3RybGVuKGFy ZykgLyAyOw0KKyAgICAgIGFyZ3VtZW50cy0+c2FsdCA9IGFyZzsNCisgICAgICBicmVhazsNCiAg ICAgZGVmYXVsdDoNCiAgICAgICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsNCiAgICAgfQ0KQEAg LTExMCwxMyArMTYwLDM2IEBAIGhleGlmeSAoY2hhciAqaGV4LCBncnViX3VpbnQ4X3QgKmJpbiwg Z3J1Yl9zaXplX3QgbikNCiAgICpoZXggPSAwOw0KIH0NCiANCitzdGF0aWMgdm9pZA0KK2hleHRv Ynl0ZShjb25zdCBjaGFyICpoZXgsIGdydWJfdWludDhfdCAqYmluLCBncnViX3NpemVfdCBuKQ0K K3sNCisgIHdoaWxlKG4pDQorICAgIHsNCisgICAgICBncnViX3VpbnQ4X3QgdG1wID0gMHgwMDsN CisgICAgICBpZiAoKmhleCA8PSAnOScgJiYgKmhleCA+PSAnMCcpDQorICAgICAgICB0bXAgKz0g KGdydWJfdWludDhfdCkoKCpoZXggLSAnMCcpIDw8IDQgJiAweGYwKTsNCisgICAgICBlbHNlDQor ICAgICAgICB0bXAgKz0gKGdydWJfdWludDhfdCkoKCpoZXggLSAnQScgKyAxMCkgPDwgNCAmIDB4 ZjApOw0KKyAgICAgIGhleCsrOw0KKyAgICAgIGlmICgqaGV4IDw9ICc5JyAmJiAqaGV4ID49ICcw JykNCisgICAgICAgIHRtcCArPSAoZ3J1Yl91aW50OF90KSgoKmhleCAtICcwJykgJiAweDBmKTsN CisgICAgICBlbHNlDQorICAgICAgICB0bXAgKz0gKGdydWJfdWludDhfdCkoKCpoZXggLSAnQScg KyAxMCkgJiAweDBmKTsNCisgICAgICAqYmluID0gdG1wOw0KKyAgICAgIGJpbisrOw0KKyAgICAg IGhleCsrOw0KKyAgICAgIG4gLT0gMjsNCisgICAgfQ0KK30NCisNCiBpbnQNCiBtYWluIChpbnQg YXJnYywgY2hhciAqYXJndltdKQ0KIHsNCiAgIHN0cnVjdCBhcmd1bWVudHMgYXJndW1lbnRzID0g ew0KICAgICAuY291bnQgPSAxMDAwMCwNCiAgICAgLmJ1ZmxlbiA9IDY0LA0KLSAgICAuc2FsdGxl biA9IDY0DQorICAgIC5zYWx0bGVuID0gNjQsDQorICAgIC5zYWx0ID0gTlVMTA0KICAgfTsNCiAg IGNoYXIgKnJlc3VsdCwgKnB0cjsNCiAgIGdjcnlfZXJyX2NvZGVfdCBnY3J5X2VycjsNCkBAIC0x MzMsNiArMjA2LDE0IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pDQogICAgICAgZXhp dCgxKTsNCiAgICAgfQ0KIA0KKyAgaWYgKGFyZ3VtZW50cy5zYWx0ICE9TlVMTCAmJg0KKyAgICAg IGdydWJfc3RybGVuKGFyZ3VtZW50cy5zYWx0KSAhPSAyICogYXJndW1lbnRzLnNhbHRsZW4pDQor ICAgIHsNCisgICAgICBmcHJpbnRmIChzdGRlcnIsICIlcyIsDQorICAgICAgICAgXygiSWYgdGhl IC1hIHBhcmFtZXRlciBpcyBzZXQsIGRvbid0IHNldCB0aGUgLXMgcGFyYW1ldGVyIGFnYWluXG4i KSk7DQorICAgICAgZXhpdCgxKTsNCisgICAgfQ0KKw0KICAgYnVmID0geG1hbGxvYyAoYXJndW1l bnRzLmJ1Zmxlbik7DQogICBzYWx0ID0geG1hbGxvYyAoYXJndW1lbnRzLnNhbHRsZW4pOw0KICAg DQpAQCAtMTYwLDggKzI0MSw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pDQogICAg ICAgZ3J1Yl91dGlsX2Vycm9yICgiJXMiLCBfKCJwYXNzd29yZHMgZG9uJ3QgbWF0Y2giKSk7DQog ICAgIH0NCiAgIG1lbXNldCAocGFzczIsIDAsIHNpemVvZiAocGFzczIpKTsNCi0NCi0gIGlmIChn cnViX2dldF9yYW5kb20gKHNhbHQsIGFyZ3VtZW50cy5zYWx0bGVuKSkNCisgIGlmIChhcmd1bWVu dHMuc2FsdCAhPSBOVUxMKQ0KKyAgICBoZXh0b2J5dGUoYXJndW1lbnRzLnNhbHQsIHNhbHQsIGFy Z3VtZW50cy5zYWx0bGVuICogMik7DQorICBlbHNlIGlmIChncnViX2dldF9yYW5kb20gKHNhbHQs IGFyZ3VtZW50cy5zYWx0bGVuKSkNCiAgICAgew0KICAgICAgIG1lbXNldCAocGFzczEsIDAsIHNp emVvZiAocGFzczEpKTsNCiAgICAgICBmcmVlIChidWYpOw0KLS0gDQoyLjMwLjANCg0KDQoNCg0K Yml0X2NvZmZlZUAxNjMuY29tDQo= ------=_001_NextPart214483541105_=---- Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable =0A
From 0892b79339cd0ab93642a6= e5d1b240bcfcae5471 Mon Sep 17 00:00:00 2001
From: liuxin <bit= _coffee@163.com>
Date: Wed, 6 Oct 2021 20:45:28 +0800
Subject: [PATCH] A new parameter is added for grub-mkpasswd-pbkdf2 tool= to 
specify a specific salt value.

 After a specific salt value is specifie= d, the output password
 is the same every time. It is conve= nient for the operating system of the
 release version to u= se this function for password verification.

---
 util/grub-mkpasswd-pbkdf2.c | 88 ++++++++++++++++++++= +++++++++++++++--
 1 file changed, 85 insertions(+), 3 dele= tions(-)

diff --git a/util/grub-mkpasswd-pbkdf2.c= b/util/grub-mkpasswd-pbkdf2.c
index 5805f3c10..4ce9d21a4 100644=
--- a/util/grub-mkpasswd-pbkdf2.c
+++ b/util/grub-mkp= asswd-pbkdf2.c
@@ -33,6 +33,9 @@
 
&nbs= p;#define _GNU_SOURCE 1
 
+#define GRUB_PARAM_SUCCESS 0
+#define GRUB_PARAM_ERROR   1
+
 #pra= gma GCC diagnostic ignored "-Wmissing-prototypes"
 #pragma = GCC diagnostic ignored "-Wmissing-declarations"
 #include &= lt;argp.h>
@@ -46,6 +49,7 @@ static struct argp_option option= s[] =3D {
   {"iteration-count",  'c', N_("NUM"),= 0, N_("Number of PBKDF2 iterations"), 0},
   {"buflen= ",  'l', N_("NUM"), 0, N_("Length of generated hash"), 0},
=    {"salt",  's', N_("NUM"), 0, N_("Length of salt"), 0},
+  {"salt arg", 'a', N_("VARCHAR"), 0, N_("preset salt var(h= ex code)"), 0},
   { 0, 0, 0, 0, 0, 0 }
&nbs= p;};
 
@@ -54,8 +58,48 @@ struct arguments
<= div>   unsigned int count;
   unsigned int b= uflen;
   unsigned int saltlen;
+  char= *salt;
 };
 
+static int
+illegal_char(char t)
+{
+  char legalstr[] =3D= "0123456789ABCDEF";
+  for (int i =3D 0; i < grub_strle= n(legalstr); ++i)
+    {
+     &nb= sp;if (t =3D=3D legalstr[i])
+ return GRUB_PARAM_SUCCESS;
+ &nbs= p;  }
+  return GRUB_PARAM_ERROR;
+}
+
+static int
+check_salt_verify(const char *arg)
+{
+  grub_size_t len =3D grub_strlen(arg);
<= div>+  if (len <=3D 0 || len >=3D GRUB_SIZE_MAX)
+ &n= bsp;  {
+      fprintf (stderr, _("salt leng= th may be empty or too long!\n"));
+      return = GRUB_PARAM_ERROR;
+    }
+  if (len % 2= !=3D0)
+    {
+      fprintf= (stderr, _("the salt value length is an even number!\n"));
+ &n= bsp;    return GRUB_PARAM_ERROR;
+    }
+  for (int i =3D 0; i < len; ++i)
+    = {
+      if(illegal_char(arg[i]))
+ {
+=  fp= rintf (stderr,
+    _("only hexadecimal numbers consisting of "= \
+    "digits and uppercase letters are supported\n"));
=
+          return GRUB_PARAM_ERROR;
+ }
+    }
+  return GRUB_PARAM_SUCCESS;
<= div>+}
+
 static error_t
 argp_par= ser (int key, char *arg, struct argp_state *state)
 {
=
@@ -76,6 +120,12 @@ argp_parser (int key, char *arg, struct argp_stat= e *state)
     case 's':
    =    arguments->saltlen =3D strtoul (arg, NULL, 0);
&= nbsp;      break;
+    case 'a':
<= div>+      if (check_salt_verify(arg))
+ return ARGP_ERR_UN= KNOWN;
+      arguments->saltlen =3D grub_strl= en(arg) / 2;
+      arguments->salt =3D arg;
+      break;
     defaul= t:
       return ARGP_ERR_UNKNOWN;
     }
@@ -110,13 +160,36 @@ hexify (char *hex, = grub_uint8_t *bin, grub_size_t n)
   *hex =3D 0;
=
 }
 
+static void
+hextobyte(= const char *hex, grub_uint8_t *bin, grub_size_t n)
+{
= +  while(n)
+    {
+     &nbs= p;grub_uint8_t tmp =3D 0x00;
+      if (*hex <= =3D '9' && *hex >=3D '0')
+       &nbs= p;tmp +=3D (grub_uint8_t)((*hex - '0') << 4 & 0xf0);
+=      else
+        tmp +=3D = (grub_uint8_t)((*hex - 'A' + 10) << 4 & 0xf0);
+  = ;    hex++;
+      if (*hex <=3D '9'= && *hex >=3D '0')
+        tmp += =3D (grub_uint8_t)((*hex - '0') & 0x0f);
+     &nb= sp;else
+        tmp +=3D (grub_uint8_t)((*h= ex - 'A' + 10) & 0x0f);
+      *bin =3D tmp;<= /div>
+      bin++;
+      hex= ++;
+      n -=3D 2;
+    }
+}
+
 int
 main (int argc= , char *argv[])
 {
   struct arguments = arguments =3D {
     .count =3D 10000,
=      .buflen =3D 64,
-    .saltlen =3D = 64
+    .saltlen =3D 64,
+    .sal= t =3D NULL
   };
   char *result, = *ptr;
   gcry_err_code_t gcry_err;
@@ -133,6= +206,14 @@ main (int argc, char *argv[])
      &= nbsp;exit(1);
     }
 
+=  if (arguments.salt !=3DNULL &&
+     &n= bsp;grub_strlen(arguments.salt) !=3D 2 * arguments.saltlen)
+ &n= bsp;  {
+      fprintf (stderr, "%s",
<= div>+         _("If the -a parameter is set, don't set= the -s parameter again\n"));
+      exit(1);
+    }
+
   buf =3D xmalloc= (arguments.buflen);
   salt =3D xmalloc (arguments.sa= ltlen);
   
@@ -160,8 +241,9 @@ main (int ar= gc, char *argv[])
       grub_util_error ("%= s", _("passwords don't match"));
     }
   memset (pass2, 0, sizeof (pass2));
-
- &= nbsp;if (grub_get_random (salt, arguments.saltlen))
+  if (= arguments.salt !=3D NULL)
+    hextobyte(arguments.sal= t, salt, arguments.saltlen * 2);
+  else if (grub_get_rando= m (salt, arguments.saltlen))
     {
&nb= sp;      memset (pass1, 0, sizeof (pass1));
 = ;      free (buf);
-- 
2.30.0

=0A


=0A
bit_coffee@= 163.com
=0A ------=_001_NextPart214483541105_=------