Due to a misunderstanding/cock-up I spent a considerable amout of time creating 
this review as opposed to its compnion and much simpler document 
draft-ietf-lamps-cms-composite-kem01.  I thought it was worth submitting 
it.Cheers,Elwyn Davies For more information, please see the FAQ 
at<https://wiki.ietf.org/en/group/gen/GenArtFAQ>.Document: 
draft-ietf-lamps-cms-composite-kem-21Reviewer: Elwyn DaviesReview Date: 
2026-09-07IETF LC End Date: 2026-08-18IESG Telechat date: 2026-09-17Summary:On 
the right track. Firstly, apologies for the very late review. The material is 
rather out of my comfort zone and necessitated a deal of background reading to 
produce a decent review, not speeded up by holidays and a week of traditional 
windmill maintenance. The decision to follow in the footsteps of RFC 9180 by 
using an enhanced Python syntax to document the functional primitives is as far 
as I know pretty novel and has vcaused a few hiccups IMO. The later sections 
beyond s4 are in good shape as far as I can see but I am far from an 
expert.Major issues:s1.2 et seq: The use of an 'enhanced' Python syntax style 
for describing the functionality of the operations in the document as 
introduced in s1.2 is, as far as I am aware, unique to this document. This 
document builds on RFC 9180 which appears to be the first document to employ 
Python or Python derived syntax for reperesenting code fragments but seems to 
use standardPytho syntax.. Whilst the syntax used is fairly 'obvious' to anyone 
with basic programming skills, I guess there should be a reference that enables 
a reader to check on the meaning of pieces of meta-Python should they be 
unfamiliar with the language - I note that this was not done in RFC 9180. In 
turn, this imposes a need for reviewers such as me to verify that pieces of 
meta-Python are actually valid Python statements subject to the syntax 
extensions set out in s1.2.There are a number of function definitions in the 
text that do not actually use the Python syntax (primarily missing the initia 
declaratory 'def' atom.) Given the emphasis on using Python structure at the 
outset, it would seem to me that the function definitions in s3 should be more 
formally in Python syntx. Of particular concern is the overloading of the use 
of round brackets to encapsulate value pairs as a single item. For example, we 
need to be clear whether the Decap function takes takes as argument a value 
pair or are its arguments a pair of simple items syntacticaly enclosed in round 
brackets - and can I write a syntax analyser which won't get confused.There is 
also confusion over what the syntactic status of a value pair is. For example 
in s3.2 at step 3 of the Encap process, the NOT function is applied to what 
looks like a value pair and apparently delivers a boolean result implying that 
the value pair is effectively a boolean value. Hmm. The text indicates that 
this could be implied if the values are invalid but this is not made explicit 
as far as I can see.Minor issues:Use of 'algorithm'; The term 'algorithm' is 
stated in the s1.1 Conventions to be 'generally' associated with a function 
which has a registered OID. In practice (cf RFC 9180 which has some attachment 
to this document) an OID references a collection of functionality referred to 
collectively as an algorithm which perform component aspects of a, possibly 
distributed (in time and/or space) task. The algorithm may be parameterized (as 
with encryption key size) and may be implemented by a number of independently 
invocable functions referred to as 'primitives' in RFC 9180.This document 
suggests in s1.1 that it intends to adhere to the OID/algorithm connection - 
indeed the majority of the document does adhere to this proposal - but the 
usage in s1.2 and s2 is in practice referring to 'primitives' or functional 
components that implement parts of the algorithm with which they are associated 
and would not have separate OIDs.Nits/editorial comments:Abstract and s1: It 
would be good to reference RFC 9794 both in the Abstract and right at the start 
of s1. RFC 9794 provides a deeper backgtround to the problem and provides the 
terminology and basic structure of the solution offered in this draft.s1, para 
6: s/that meets the needs/that meet the needs/s1.1, para 3: It would be helpful 
to provide a refereence to the IANA OID registry.s1.1: Is there any good reason 
why the labels for the items ALGORITHM, APPLICATION BACKWARDS COMPATIBILITY, 
COMBINER, COMPOSITE CRYPTOGRAPHIC ELEMENT, POST-QUANTUM TRADITIONAL (PQ/T) 
HYBRID SCHEME, PROTOCOL BACKWARDS COMPATIBILITY, and SHARED SECRET KEY are 
capitaized - their originals in RFC 9180 are are typically in title case. The 
use of hanging label indented pargraphs might be appropriate.s1.1: The term 
COMPOSITE CRYPTOGRAPHIC ELEMENT dos not appear to be used in the document. 
Which part(s) of constructions defined here should be referred to by this 
term?s1.1: The term 'composite ciphertext' is used on a number of occasions - a 
definition might be useful.s1.2, concatenation of byte arrays: Given the 
association with RFC 9180, it might be more consistent to use the concat() 
notation defined in Section 3 of RFC 9180.s1.2, definition of (a, _): As far as 
I can tell, this form is not used in the document.s1.2, definition of 
Func<TYPE>(): This form is (as far as I can tell) only used in reminding the 
implementers of the KeyGen, Encap(s), and Decap(s) primitive functions that the 
input parameter values for the primitives are determined by the OID with which 
the primitive will be associated. I suggest that the terms night be called 
Composite-ML-KEM-<OID-name> which groups the primitives associated with that 
OID.s2, para 4 - definitions of Encaps and Decaps: I concur with a previous 
reviewer who opined that as an IETF document it would be appropriate to stick 
with Encap and Decap.s2.1 and s2.2: The presentation of the Encap(s) and 
Decap(s) fuctions should be as properly formatted Python function 
definitions.s2.1 and s2.2: Should the return statements of the Encap(s) 
functions read 'return( shared_secret, enc)' in line with the input usage for 
the Decaps primitives? s2.1, last two paragraphs: I suggest that these 
paragraphs be presented as separate subsidiary sections s2.1.1 and s2.1.2 with 
the title of s2.1.1 being 'Note on the choice....' and s2.1.2 being Status of 
Algorithm RSAOAEPKEM.s2.2, last para: as with last para of s2.1.ss3.2, 3.3 and 
3.4: In line with the Python structure decision, the functions in these 
sections should be formulated as proper Python function definitions.s.3.1.1: 
Trailing full stop (or period) is missing. (oo, er!)s3.2, para1: s/to behave 
exactly the same as/to behave in exactly the same manner as/s3.2, item 3: As 
discussed above, the paired values tested with 'NOT' need to be carrying around 
a BOOLEAN value representing whether the Encap(s) processes that generated them 
completed successfully s3.4, SHA3-256 encoding call: Replace prameter list with 
correspponding 'concat() functio n call.s4: The coding is not in Python format. 
In particular ss4.1 and 4.3 should use 'match' i n place of 'switch'.s9.2.1: 
This glossary would be more user friendly if the definitions were in separate 
paragraphs or bullet points.Sent from my GalaxySent from my Galaxy
_______________________________________________
Gen-art mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to