From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1klEoQ-0000nq-8D for mharc-grub-devel@gnu.org; Fri, 04 Dec 2020 12:24:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:40948) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klEkH-00008e-7H for grub-devel@gnu.org; Fri, 04 Dec 2020 12:19:55 -0500 Received: from mail-io1-xd2b.google.com ([2607:f8b0:4864:20::d2b]:46709) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1klEjP-0000f4-Kl for grub-devel@gnu.org; Fri, 04 Dec 2020 12:19:31 -0500 Received: by mail-io1-xd2b.google.com with SMTP id 81so6457615ioc.13 for ; Fri, 04 Dec 2020 09:15:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficientek-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0erYNjL4DzJeqZLRPLd6A6M3MWUjka8432ymt0Cy2eU=; b=sdznJSs93R6tRxWkJMvss32sb7+vLGNI5FqGN579LOJd4DT6/m2w25tFZRQO+IG7N6 69yvziJxoinW/Pkk6qtbybxmrahfXLwmovW4R1KXMJTEh5txsCJ4Iub8VQ1UFsAOE66U IXVg1taxG8xKxvEpuc+ugEphX9jiNMvGMa1+KfDtZQUROgKSXlgHvM2YH8QphcLw2R2w vj2M1JXH3X0ZHxxa2K14DZgosRH/ezc2CeSuzRIBJHo1s6xjIUPAJiLRg8xlo2P33KtY 8yL8Rbjjgt5QlIZ0/ZK3AsBworNGe/HDAe+rZkRih5qfot4v1SBep68xRwCnBe6ndD/+ uqKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0erYNjL4DzJeqZLRPLd6A6M3MWUjka8432ymt0Cy2eU=; b=jfz6aSkoHFR6ehHd5B66fx2/u/Nb/Bb1O2i3olvkOKHT/HAIBc0aD2Vv0x8zG1hMRV ZCKwRsyqZvH/Fkp7000Uq6MtbfRo/5agNrSz/eobqSWMn6zRquT8pP99fHoy2VXehyCL M3hsSJom2yd4YkWXni+7gwAJLFaS1t5VWb5WxnXW2i9cfVgSDtxbrOX10pow6ix8IDeZ 4EYfKvMHoKtrgx9U0U1+zoFSHQHMKhPbGNQUAvOEOS+mxl6CtIEcMgNCyeEOTIgrNPwm 9aOiMLZ/ilmciZVkLhq/hH3D58YCC41AyypsPrE1smmdN94RX05Tdb58H1+mr6YHugoC 4xig== X-Gm-Message-State: AOAM533kyw/h7JQTsB1Ck9ZUQibosgj/Nm5bjnX/mFB1onJUzr++FdUZ Yt9kvL+bY2tQLUDnlht6kYYHEk+SuqjJHw== X-Google-Smtp-Source: ABdhPJxPfH/S13d28fUny4f2cRmtziQTF7Z84+8NT9MFigtBtGxisetLdoUNPhN1LlzbF3SRu7oe1g== X-Received: by 2002:a92:3403:: with SMTP id b3mr7314026ila.140.1607100257360; Fri, 04 Dec 2020 08:44:17 -0800 (PST) Received: from localhost.localdomain ([136.49.211.192]) by smtp.gmail.com with ESMTPSA id w3sm1754909iol.9.2020.12.04.08.44.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Dec 2020 08:44:16 -0800 (PST) From: Glenn Washburn To: grub-devel@gnu.org Cc: Patrick Steinhardt , Daniel Kiper , Glenn Washburn Subject: [PATCH v7 05/17] luks2: Add json_slot_key member to struct grub_luks2_keyslot/segment/digest Date: Fri, 4 Dec 2020 10:43:34 -0600 Message-Id: <35f47644cdc76e65a5d51a625c4a790fc10b437c.1607098915.git.development@efficientek.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2607:f8b0:4864:20::d2b; envelope-from=development@efficientek.com; helo=mail-io1-xd2b.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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: Fri, 04 Dec 2020 17:20:17 -0000 This allows code using these structs to know the named key associated with these json data structures. In the future we can use these to provide better error messages to the user. Get rid of idx variable in luks2_get_keyslot() which was overloaded to be used for both keyslot and segment slot keys. Signed-off-by: Glenn Washburn --- grub-core/disk/luks2.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c index eadd529e9..437c1da07 100644 --- a/grub-core/disk/luks2.c +++ b/grub-core/disk/luks2.c @@ -65,6 +65,8 @@ typedef struct grub_luks2_header grub_luks2_header_t; struct grub_luks2_keyslot { + /* The integer key to the associative array of keyslots */ + grub_uint64_t json_slot_key; grub_int64_t key_size; grub_int64_t priority; struct @@ -103,6 +105,7 @@ typedef struct grub_luks2_keyslot grub_luks2_keyslot_t; struct grub_luks2_segment { + grub_uint64_t json_slot_key; grub_uint64_t offset; const char *size; const char *encryption; @@ -112,6 +115,7 @@ typedef struct grub_luks2_segment grub_luks2_segment_t; struct grub_luks2_digest { + grub_uint64_t json_slot_key; /* Both keyslots and segments are interpreted as bitfields here */ grub_uint64_t keyslots; grub_uint64_t segments; @@ -261,12 +265,11 @@ luks2_get_keyslot (grub_luks2_keyslot_t *k, grub_luks2_digest_t *d, grub_luks2_s { grub_json_t keyslots, keyslot, digests, digest, segments, segment; grub_size_t i, size; - grub_uint64_t idx; /* Get nth keyslot */ if (grub_json_getvalue (&keyslots, root, "keyslots") || grub_json_getchild (&keyslot, &keyslots, keyslot_idx) || - grub_json_getuint64 (&idx, &keyslot, NULL) || + grub_json_getuint64 (&k->json_slot_key, &keyslot, NULL) || grub_json_getchild (&keyslot, &keyslot, 0) || luks2_parse_keyslot (k, &keyslot)) return grub_error (GRUB_ERR_BAD_ARGUMENT, "Could not parse keyslot %"PRIuGRUB_SIZE, keyslot_idx); @@ -278,11 +281,12 @@ luks2_get_keyslot (grub_luks2_keyslot_t *k, grub_luks2_digest_t *d, grub_luks2_s for (i = 0; i < size; i++) { if (grub_json_getchild (&digest, &digests, i) || + grub_json_getuint64 (&d->json_slot_key, &digest, NULL) || grub_json_getchild (&digest, &digest, 0) || luks2_parse_digest (d, &digest)) return grub_error (GRUB_ERR_BAD_ARGUMENT, "Could not parse digest %"PRIuGRUB_SIZE, i); - if ((d->keyslots & (1 << idx))) + if ((d->keyslots & (1 << k->json_slot_key))) break; } if (i == size) @@ -295,12 +299,12 @@ luks2_get_keyslot (grub_luks2_keyslot_t *k, grub_luks2_digest_t *d, grub_luks2_s for (i = 0; i < size; i++) { if (grub_json_getchild (&segment, &segments, i) || - grub_json_getuint64 (&idx, &segment, NULL) || + grub_json_getuint64 (&s->json_slot_key, &segment, NULL) || grub_json_getchild (&segment, &segment, 0) || luks2_parse_segment (s, &segment)) return grub_error (GRUB_ERR_BAD_ARGUMENT, "Could not parse segment %"PRIuGRUB_SIZE, i); - if ((d->segments & (1 << idx))) + if ((d->segments & (1 << s->json_slot_key))) break; } if (i == size) -- 2.27.0