But, while it may be clear to you, what I'm saying here is that it's not
clear to a reader/implementer.

Somehow the conversion from a character string to an octet string needs to
be clearly and unambiguously stated. It doesn't have to be the text I
suggested but it's not sufficient as it is now.

Something like this might work, if you don't want to touch the parts in 4.2
and 4.6: "SHA256(STRING) denotes a SHA2 256bit hash [RFC6234] of the octets
of the ASCII [RFC0020] representation of STRING."

An "octet sequence using the url and filename safe Alphabet [...], with
length less than 128 characters." is ambiguous. Octets and characters are
intermixed with no mention of encoding. But they're not interchangeable.


On Fri, Jan 30, 2015 at 7:15 AM, Nat Sakimura <sakim...@gmail.com> wrote:

> I do not think we need ASCII(). It is quite clear without it, I suppose.
>
> In 4.1, I would rather do like:
>
>  code_verifier = high entropy cryptographic random
>    octet sequence using the url and filename safe Alphabet [A-Z] / [a-z]
>    / [0-9] / "-" / "_" from Sec 5 of RFC 4648 [RFC4648], with length
>    less than 128 characters.
>
> Nat
>
> 2015-01-30 22:51 GMT+09:00 Brian Campbell <bcampb...@pingidentity.com>:
>
>> That's definitely an improvement (to me anyway).
>>
>> Checking that the rest of the document uses those notations
>> appropriately, I think, yields a few other changes. And probably begs for
>> the "ASCII(STRING) denotes the octets of the ASCII representation of
>> STRING" notation/function, or something like it, to be put back in. Those
>> changes might look like the following:
>>
>>
>> In 4.1.:
>>
>> OLD:
>>    code_verifier = high entropy cryptographic random ASCII [RFC0020]
>>    octet sequence using the url and filename safe Alphabet [A-Z] / [a-z]
>>    / [0-9] / "-" / "_" from Sec 5 of RFC 4648 [RFC4648], with length
>>    less than 128 characters.
>>
>> NEW (maybe):
>>   code_verifier = high entropy cryptographically strong random STRING
>>   using the url and filename safe Alphabet [A-Z] / [a-z]
>>    / [0-9] / "-" / "_" from Sec 5 of RFC 4648 [RFC4648], with length
>>    less than 128 characters.
>>
>>
>> In 4.2.:
>>
>> OLD:
>>    S256  "code_challenge" = BASE64URL(SHA256("code_verifier"))
>>
>> NEW (maybe):
>>    S256  "code_challenge" = BASE64URL(SHA256(ASCII("code_verifier")))
>>
>>
>> In 4.6.:
>>
>> OLD:
>>    SHA256("code_verifier" ) == BASE64URL-DECODE("code_challenge").
>>
>> NEW (maybe):
>>    SHA256(ASCII("code_verifier")) == BASE64URL-DECODE("code_challenge").
>>
>>
>>
>>
>> On Thu, Jan 29, 2015 at 8:37 PM, Nat Sakimura (=nat) <n...@sakimura.org>
>> wrote:
>>
>>> I take your point, Brian.
>>>
>>> In our most recent manuscript, STRING is defined inside ASCII(STRING) as
>>>
>>> STRING is a sequence of zero or more ASCII characters
>>>
>>> but it is kind of circular, and we do not seem to use ASCII().
>>>
>>> What about re-writing the section like below?
>>>
>>> STRING denotes a sequence of zero or more ASCII  [RFC0020]
>>> <http://xml2rfc.ietf.org/cgi-bin/xml2rfc.cgi#RFC0020> characters.
>>>
>>> OCTETS denotes a sequence of zero or more octets.
>>>
>>> BASE64URL(OCTETS) denotes the base64url encoding of OCTETS, per Section
>>> 3 <http://xml2rfc.ietf.org/cgi-bin/xml2rfc.cgi#Terminology> producing a
>>> ASCII[RFC0020] <http://xml2rfc.ietf.org/cgi-bin/xml2rfc.cgi#RFC0020>
>>>  STRING.
>>>
>>> BASE64URL-DECODE(STRING) denotes the base64url decoding of STRING, per 
>>> Section
>>> 3 <http://xml2rfc.ietf.org/cgi-bin/xml2rfc.cgi#Terminology>, producing
>>> a sequence of octets.
>>>
>>> SHA256(OCTETS) denotes a SHA2 256bit hash [RFC6234]
>>> <http://xml2rfc.ietf.org/cgi-bin/xml2rfc.cgi#RFC6234> of OCTETS.
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Jan 30, 2015, at 08:15, Brian Campbell <bcampb...@pingidentity.com>
>>> wrote:
>>>
>>> In §2 [1] we've got "SHA256(STRING) denotes a SHA2 256bit hash [RFC6234]
>>> of STRING."
>>>
>>> But, in the little cow town where I come from anyway, you hash
>>> bits/octets not character strings (BTW, "STRING" isn't defined anywhere but
>>> it's kind of implied that it's a string of characters).
>>>
>>> Should it say something more like "SHA256(STRING) denotes a SHA2 256bit
>>> hash [RFC6234] of the octets of the ASCII [RFC0020] representation of
>>> STRING."?
>>>
>>> I know it's kind of pedantic but I find it kind of confusing because the
>>> code_verifier uses the url and filename safe alphabet, which has me second
>>> guessing if SHA256(STRING) actually means a hash of the octet produced by
>>> base64url decoding the string.
>>>
>>> Maybe it's just me but, when reading the text, I find the transform
>>> process to be much more confusing than I think it needs to be. Removing and
>>> clarifying some things will help. I hate to suggest this but maybe an
>>> example showing the computation steps on both ends would be helpful?
>>>
>>> Also "UTF8(STRING)" and "ASCII(STRING)" notations are defined in §2 but
>>> not used anywhere.
>>>
>>> And §2 also says, "BASE64URL-DECODE(STRING) denotes the base64url
>>> decoding of STRING, per Section 3, producing a UTF-8 sequence of octets."
>>> But what is a UTF-8 sequence of octets? Isn't it just a sequence octets?
>>> The [RFC3629] reference, I think, could be removed.
>>>
>>> [1] https://tools.ietf.org/html/draft-ietf-oauth-spop-06#section-2
>>>
>>>
>>> Nat Sakimura
>>> n...@sakimura.org
>>>
>>>
>>>
>>>
>>>
>>>
>>
>
>
> --
> Nat Sakimura (=nat)
> Chairman, OpenID Foundation
> http://nat.sakimura.org/
> @_nat_en
>
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to