rfc8682xml2.original.xml | rfc8682.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse | |||
<!ENTITY rfc2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | nsus="true" docName="draft-ietf-tsvwg-tinymt32-06" indexInclude="true" ipr="trus | |||
.2119.xml"> | t200902" number="8682" prepTime="2020-01-08T15:20:14" scripts="Common,Latin" sor | |||
<!ENTITY rfc8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | tRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" | |||
.8174.xml"> | xml:lang="en"> | |||
<!ENTITY rfc5170 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | <link href="https://datatracker.ietf.org/doc/draft-ietf-tsvwg-tinymt32-06" rel | |||
.5170.xml"> <!-- ldpc --> | ="prev"/> | |||
]> | <link href="https://dx.doi.org/10.17487/rfc8682" rel="alternate"/> | |||
<link href="urn:issn:2070-1721" rel="alternate"/> | ||||
<?rfc toc="yes" ?> | <front> | |||
<?rfc compact="yes" ?> | <title abbrev="TinyMT32 PRNG">TinyMT32 Pseudorandom Number Generator (PRNG)< | |||
<?rfc subcompact="yes" ?> | /title> | |||
<?rfc symrefs="yes" ?> | <seriesInfo name="RFC" value="8682" stream="IETF"/> | |||
<?rfc sortrefs="yes" ?> | <author fullname="Mutsuo Saito" initials="M" surname="Saito"> | |||
<?rfc rfcedstyle="yes" ?> | <organization showOnFrontPage="true">Hiroshima University</organization> | |||
<address> | ||||
<rfc category="std" docName="draft-ietf-tsvwg-tinymt32-06" ipr="trust200902"> | <postal> | |||
<street/> | ||||
<front> | <city/> | |||
<title abbrev="TinyMT32 PRNG">TinyMT32 Pseudo Random Number Generator (PR | <country>Japan</country> | |||
NG)</title> | </postal> | |||
<email>saito@math.sci.hiroshima-u.ac.jp</email> | ||||
<author fullname="Mutsuo Saito" initials="M" surname="Saito"> | </address> | |||
<organization>Hiroshima University</organization> | </author> | |||
<address> | <author fullname="Makoto Matsumoto" initials="M" surname="Matsumoto"> | |||
<postal> | <organization showOnFrontPage="true">Hiroshima University</organization> | |||
<street></street> | <address> | |||
<city></city> | <postal> | |||
<country>Japan</country> | <street/> | |||
</postal> | <city/> | |||
<email>saito@math.sci.hiroshima-u.ac.jp</email> | <country>Japan</country> | |||
</address> | </postal> | |||
</author> | <email>m-mat@math.sci.hiroshima-u.ac.jp</email> | |||
</address> | ||||
<author fullname="Makoto Matsumoto" initials="M" surname="Matsumoto"> | </author> | |||
<organization>Hiroshima University</organization> | <author fullname="Vincent Roca" initials="V" surname="Roca" role="editor"> | |||
<address> | <organization showOnFrontPage="true">INRIA</organization> | |||
<postal> | <address> | |||
<street></street> | <postal> | |||
<city></city> | <street/> | |||
<country>Japan</country> | <city/> | |||
</postal> | <code/> | |||
<email>m-mat@math.sci.hiroshima-u.ac.jp</email> | <extaddr>Univ. Grenoble Alpes</extaddr> | |||
</address> | <country>France</country> | |||
</author> | </postal> | |||
<email>vincent.roca@inria.fr</email> | ||||
<author fullname="Vincent Roca" initials="V" surname="Roca (Ed.)"> | </address> | |||
<organization>INRIA</organization> | </author> | |||
<address> | <author fullname="Emmanuel Baccelli" initials="E" surname="Baccelli"> | |||
<postal> | <organization showOnFrontPage="true">INRIA</organization> | |||
<street></street> | <address> | |||
<city>Univ. Grenoble Alpes</city> | <postal> | |||
<code></code> | <street/> | |||
<country>France</country> | <city/> | |||
</postal> | <code/> | |||
<email>vincent.roca@inria.fr</email> | <country>France</country> | |||
</address> | </postal> | |||
</author> | <email>emmanuel.baccelli@inria.fr</email> | |||
</address> | ||||
<author fullname="Emmanuel Baccelli" initials="E" surname="Baccelli"> | </author> | |||
<organization>INRIA</organization> | <date month="01" year="2020"/> | |||
<address> | <workgroup>TSVWG</workgroup> | |||
<postal> | <abstract pn="section-abstract"> | |||
<street></street> | <t pn="section-abstract-1"> | |||
<city></city> | This document describes the TinyMT32 Pseudorandom Number Generator (PRNG), which | |||
<code></code> | produces 32-bit pseudorandom unsigned integers and aims at having a simple-to-u | |||
<country>France</country> | se and deterministic solution. | |||
</postal> | This PRNG is a small-sized variant of the Mersenne Twister (MT) PRNG. | |||
<email>emmanuel.baccelli@inria.fr</email> | The main advantage of TinyMT32 over MT is the use of a small internal state, com | |||
</address> | patible with most target platforms that include embedded devices, while keeping | |||
</author> | reasonably good randomness that represents a significant improvement compared to | |||
<!-- <date month="February" year="2017" /> --> | the Park-Miller Linear Congruential PRNG. | |||
<date/> | However, neither the TinyMT nor MT PRNG is meant to be used for cryptographic ap | |||
plications. | ||||
<workgroup>TSVWG</workgroup> | ||||
<abstract> | ||||
<t> | ||||
This document describes the TinyMT32 Pseudo Random Number Generator (PRNG) that | ||||
produces 32-bit pseudo-random unsigned integers and aims at having a simple-to-u | ||||
se and deterministic solution. | ||||
This PRNG is a small-sized variant of Mersenne Twister (MT) PRNG. | ||||
The main advantage of TinyMT32 over MT is the use of a small internal state, com | ||||
patible with most target platforms that include embedded devices, while keeping | ||||
a reasonably good randomness that represents a sigificant improvement compared t | ||||
o the Park-Miller Linear Congruential PRNG. | ||||
However, neither the TinyMT nor MT PRNG are meant to be used for cryptographic a | ||||
pplications. | ||||
</t> | </t> | |||
</abstract> | </abstract> | |||
<boilerplate> | ||||
</front> | <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc= | |||
"exclude" pn="section-boilerplate.1"> | ||||
<middle> | <name slugifiedName="name-status-of-this-memo">Status of This Memo</name | |||
> | ||||
<section anchor="introduction" title="Introduction"> | <t pn="section-boilerplate.1-1"> | |||
<!-- ====================== --> | This is an Internet Standards Track document. | |||
</t> | ||||
<t> | <t pn="section-boilerplate.1-2"> | |||
This document specifies the TinyMT32 PRNG, as a specialization of the reference | This document is a product of the Internet Engineering Task Force | |||
implementation version 1.1 (2015/04/24) by Mutsuo Saito and Makoto Matsumoto, fr | (IETF). It represents the consensus of the IETF community. It has | |||
om Hiroshima University, that can be found at <xref target="TinyMT-web"/> (TinyM | received public review and has been approved for publication by | |||
T web site) and <xref target="TinyMT-dev"/> (Github site). | the Internet Engineering Steering Group (IESG). Further | |||
This specialisation aims at having a simple-to-use and deterministic PRNG, as ex | information on Internet Standards is available in Section 2 of | |||
plained below. | RFC 7841. | |||
</t> | ||||
<t pn="section-boilerplate.1-3"> | ||||
Information about the current status of this document, any | ||||
errata, and how to provide feedback on it may be obtained at | ||||
<eref target="https://www.rfc-editor.org/info/rfc8682" brackets="non | ||||
e"/>. | ||||
</t> | ||||
</section> | ||||
<section anchor="copyright" numbered="false" removeInRFC="false" toc="excl | ||||
ude" pn="section-boilerplate.2"> | ||||
<name slugifiedName="name-copyright-notice">Copyright Notice</name> | ||||
<t pn="section-boilerplate.2-1"> | ||||
Copyright (c) 2020 IETF Trust and the persons identified as the | ||||
document authors. All rights reserved. | ||||
</t> | ||||
<t pn="section-boilerplate.2-2"> | ||||
This document is subject to BCP 78 and the IETF Trust's Legal | ||||
Provisions Relating to IETF Documents | ||||
(<eref target="https://trustee.ietf.org/license-info" brackets="none | ||||
"/>) in effect on the date of | ||||
publication of this document. Please review these documents | ||||
carefully, as they describe your rights and restrictions with | ||||
respect to this document. Code Components extracted from this | ||||
document must include Simplified BSD License text as described in | ||||
Section 4.e of the Trust Legal Provisions and are provided without | ||||
warranty as described in the Simplified BSD License. | ||||
</t> | ||||
</section> | ||||
</boilerplate> | ||||
<toc> | ||||
<section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" p | ||||
n="section-toc.1"> | ||||
<name slugifiedName="name-table-of-contents">Table of Contents</name> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="section-to | ||||
c.1-1"> | ||||
<li pn="section-toc.1-1.1"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent | ||||
="1" format="counter" sectionFormat="of" target="section-1"/>. <xref derivedCon | ||||
tent="" format="title" sectionFormat="of" target="name-introduction">Introductio | ||||
n</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.1.2"> | ||||
<li pn="section-toc.1-1.1.2.1"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derive | ||||
dContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-requirements- | ||||
language">Requirements Language</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.2"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent | ||||
="2" format="counter" sectionFormat="of" target="section-2"/>. <xref derivedCon | ||||
tent="" format="title" sectionFormat="of" target="name-tinymt32-prng-specificati | ||||
on">TinyMT32 PRNG Specification</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.2.2"> | ||||
<li pn="section-toc.1-1.2.2.1"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.1.1"><xref derive | ||||
dContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-tinymt32-sour | ||||
ce-code">TinyMT32 Source Code</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.2"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.2.1"><xref derive | ||||
dContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-tinymt32-usag | ||||
e">TinyMT32 Usage</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.3"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.3.1"><xref derive | ||||
dContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-specific-impl | ||||
ementation-val">Specific Implementation Validation and Deterministic Behavior</x | ||||
ref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.3"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent | ||||
="3" format="counter" sectionFormat="of" target="section-3"/>. <xref derivedCon | ||||
tent="" format="title" sectionFormat="of" target="name-security-considerations"> | ||||
Security Considerations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.4.1"><xref derivedContent | ||||
="4" format="counter" sectionFormat="of" target="section-4"/>. <xref derivedCon | ||||
tent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA | ||||
Considerations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.5.1"><xref derivedContent | ||||
="5" format="counter" sectionFormat="of" target="section-5"/>. <xref derivedCon | ||||
tent="" format="title" sectionFormat="of" target="name-references">References</x | ||||
ref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.5.2"> | ||||
<li pn="section-toc.1-1.5.2.1"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.5.2.1.1"><xref derive | ||||
dContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-normative-ref | ||||
erences">Normative References</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.2"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.5.2.2.1"><xref derive | ||||
dContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-informative-r | ||||
eferences">Informative References</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.6"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.6.1"><xref derivedContent | ||||
="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedC | ||||
ontent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknow | ||||
ledgments</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.1"><xref derivedContent | ||||
="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedC | ||||
ontent="" format="title" sectionFormat="of" target="name-authors-addresses">Auth | ||||
ors' Addresses</xref></t> | ||||
</li> | ||||
</ul> | ||||
</section> | ||||
</toc> | ||||
</front> | ||||
<middle> | ||||
<section anchor="introduction" numbered="true" toc="include" removeInRFC="fa | ||||
lse" pn="section-1"> | ||||
<name slugifiedName="name-introduction">Introduction</name> | ||||
<t pn="section-1-1"> | ||||
This document specifies the TinyMT32 PRNG as a specialization of the | ||||
reference implementation version 1.1 (2015/04/24) by Mutsuo Saito and Makoto | ||||
Matsumoto from Hiroshima University, which can be found at <xref target="TinyMT- | ||||
web" format="default" sectionFormat="of" derivedContent="TinyMT-web"/> (the Tiny | ||||
MT website) and <xref target="TinyMT-dev" format="default" sectionFormat="of" de | ||||
rivedContent="TinyMT-dev"/> | ||||
(the GitHub site). | ||||
This specialization aims at having a simple-to-use and deterministic PRNG, as ex | ||||
plained below. | ||||
However, the TinyMT32 PRNG is not meant to be used for cryptographic application s. | However, the TinyMT32 PRNG is not meant to be used for cryptographic application s. | |||
</t> | </t> | |||
<t pn="section-1-2"> | ||||
<t> | TinyMT is a new, small-sized variant of the Mersenne | |||
TinyMT is a new small-sized variant introduced in 2011 of the Mersenne Twister ( | Twister (MT) PRNG introduced in 2011 <xref target="MT98" format="default" sectio | |||
MT) PRNG <xref target="MT98"/>. | nFormat="of" derivedContent="MT98"/>. | |||
This document focusses on the TinyMT32 variant (rather than TinyMT64) of the Tin | This document focuses on the TinyMT32 variant (rather than TinyMT64) of the Tiny | |||
yMT PRNG, which outputs 32-bit unsigned integers. | MT PRNG, which outputs 32-bit unsigned integers. | |||
</t> | </t> | |||
<t pn="section-1-3"> | ||||
<t> | The purpose of TinyMT is not to replace the Mersenne Twister: TinyMT has a far s | |||
The purpose of TinyMT is not to replace Mersenne Twister: TinyMT has a far short | horter period (2<sup>127</sup> - 1) than MT. | |||
er period (2^^127 - 1) than MT. | The merit of TinyMT is in the small size of the 127-bit internal state, far smal | |||
The merit of TinyMT is in the small size of the internal state of 127 bits, far | ler than the 19937 bits of MT. | |||
smaller than the 19937 bits of MT. | ||||
The outputs of TinyMT satisfy several statistical tests for non-cryptographic ra ndomness, including BigCrush | The outputs of TinyMT satisfy several statistical tests for non-cryptographic ra ndomness, including BigCrush | |||
in TestU01 <xref target="TestU01"/> and AdaptiveCrush <xref target="AdaptiveCrus h"/>, leaving it well-placed | in TestU01 <xref target="TestU01" format="default" sectionFormat="of" derivedCon tent="TestU01"/> and AdaptiveCrush <xref target="AdaptiveCrush" format="default" sectionFormat="of" derivedContent="AdaptiveCrush"/>, leaving it well placed | |||
for non-cryptographic usage, especially given the small size of its internal sta te | for non-cryptographic usage, especially given the small size of its internal sta te | |||
(see <xref target="TinyMT-web"/>). | (see <xref target="TinyMT-web" format="default" sectionFormat="of" derivedConten | |||
From this point of view, TinyMT32 represents a major improvement with respect to | t="TinyMT-web"/>). | |||
the Park-Miller Linear Congruential PRNG (e.g., as specified in <xref target="R | ||||
FC5170"/>) that suffers several known limitations (see for instance <xref target | ||||
="PTVF92"/>, section 7.1, p. 279, and <xref target="RLC-ID"/>, Appendix B). | ||||
</t> | ||||
<t> | From this point of view, TinyMT32 represents a major improvement with respect | |||
to the Park-Miller Linear Congruential PRNG (e.g., as specified in <xref target= | ||||
"RFC5170" format="default" sectionFormat="of" derivedContent="RFC5170"/>), which | ||||
suffers from several known | ||||
limitations (see, for instance, <xref target="PTVF92" format="default" sectionFo | ||||
rmat="of" derivedContent="PTVF92"/>, | ||||
Section 7.1, p. 279 and <xref target="RFC8681" sectionFormat="comma" section="B" | ||||
format="default" derivedLink="https://rfc-editor.org/rfc/rfc8681#appendix-B" de | ||||
rivedContent="RFC8681"/>). | ||||
</t> | ||||
<t pn="section-1-4"> | ||||
The TinyMT32 PRNG initialization depends, among other things, on a parameter set , namely (mat1, mat2, tmat). | The TinyMT32 PRNG initialization depends, among other things, on a parameter set , namely (mat1, mat2, tmat). | |||
In order to facilitate the use of this PRNG and make the sequence of pseudo-rand | In order to facilitate the use of this PRNG and to make the sequence of pseudora | |||
om numbers depend only on the seed value, this specification requires the use of | ndom numbers depend only on the seed value, this specification requires the use | |||
a specific parameter set (see <xref target="tinymt32_source_code"/>). | of a specific parameter set (see <xref target="tinymt32_source_code" format="def | |||
This is a major difference with respect to the implementation version 1.1 (2015/ | ault" sectionFormat="of" derivedContent="Section 2.1"/>). | |||
04/24) that leaves this parameter set unspecified. | This is a major difference with respect to the implementation version 1.1 | |||
(2015/04/24), which leaves this parameter set unspecified. | ||||
</t> | </t> | |||
<t pn="section-1-5"> | ||||
<t> | Finally, the determinism of this PRNG for a given seed has been carefully checke | |||
Finally, the determinism of this PRNG, for a given seed, has been carefully chec | d (see <xref target="tinymt32_validation" format="default" sectionFormat="of" de | |||
ked (see <xref target="tinymt32_validation"/>). | rivedContent="Section 2.3"/>). | |||
It means that the same sequence of pseudo-random numbers should be generated, no | This means that the same sequence of pseudorandom numbers should be generated, n | |||
matter the target execution platform and compiler, for a given initial seed val | o matter the target execution platform and compiler, for a given initial seed va | |||
ue. | lue. | |||
This determinism can be a key requirement as it the case with <xref target="RLC- | This determinism can be a key requirement, as is the case with <xref target="RFC | |||
ID"/> that normatively depends on this specification. | 8681" format="default" sectionFormat="of" derivedContent="RFC8681"/>, which norm | |||
atively depends on this specification. | ||||
</t> | </t> | |||
<section anchor="definitionsAndAbbreviations" numbered="true" toc="include | ||||
</section> | " removeInRFC="false" pn="section-1.1"> | |||
<name slugifiedName="name-requirements-language">Requirements Language</ | ||||
<!-- <section anchor="definitionsAndAbbreviations" title="Definitions and Abbrev | name> | |||
iations"> --> | <t pn="section-1.1-1"> | |||
<section anchor="definitionsAndAbbreviations" title="Definitions"> | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
<!-- ====================== --> | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | |||
", | ||||
<t> | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | be | |||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | interpreted as described in BCP 14 <xref target="RFC2119" format="default" s | |||
when, and only when, they appear in all capitals, as shown here. | ectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="defa | |||
ult" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they app | ||||
ear in all capitals, as | ||||
shown here. | ||||
</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="tinymt32_specs" numbered="true" toc="include" removeInRFC=" | ||||
false" pn="section-2"> | ||||
<name slugifiedName="name-tinymt32-prng-specification">TinyMT32 PRNG Speci | ||||
fication</name> | ||||
<section anchor="tinymt32_source_code" numbered="true" toc="include" remov | ||||
eInRFC="false" pn="section-2.1"> | ||||
<name slugifiedName="name-tinymt32-source-code">TinyMT32 Source Code</na | ||||
me> | ||||
<t pn="section-2.1-1"> | ||||
The TinyMT32 PRNG must be initialized with a parameter set that needs to be well | ||||
chosen. | ||||
In this specification, for the sake of simplicity, the following parameter set < | ||||
bcp14>MUST</bcp14> be used: | ||||
</t> | </t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.1-2"> | ||||
<!-- | <li pn="section-2.1-2.1">mat1 = 0x8f7011ee = 2406486510</li> | |||
<t>This document uses the following definitions and abbreviations: <list style=" | <li pn="section-2.1-2.2">mat2 = 0xfc78ff1f = 4235788063</li> | |||
hanging"> | <li pn="section-2.1-2.3">tmat = 0x3793fdff = 932445695</li> | |||
</ul> | ||||
<t hangText="PRNG:"> pseudo-random number generator</t> | <t pn="section-2.1-3"> | |||
</list></t> | This parameter set is the first entry of the precalculated parameter sets in tin | |||
ymt32dc/tinymt32dc.0.1048576.txt by Kenji Rikitake, available at <xref target="T | ||||
</section> | inyMT-params" format="default" sectionFormat="of" derivedContent="TinyMT-params" | |||
/>. | ||||
<!-- =========================================================================== | This is also the parameter set used in <xref target="KR12" format="default" sect | |||
================ --> | ionFormat="of" derivedContent="KR12"/>. | |||
<section anchor="tinymt32_specs" title="TinyMT32 PRNG Specification"> | ||||
<!-- ====================== --> | ||||
<section anchor="tinymt32_source_code" title="TinyMT32 Source Code"> | ||||
<!-- ====================== --> | ||||
<t> | ||||
The TinyMT32 PRNG requires to be initialized with a parameter set that needs to | ||||
be well chosen. | ||||
In this specification, for the sake of simplicity, the following parameter set M | ||||
UST be used: | ||||
<list style="symbols"> | ||||
<t>mat1 = 0x8f7011ee = 2406486510</t> | ||||
<t>mat2 = 0xfc78ff1f = 4235788063</t> | ||||
<t>tmat = 0x3793fdff = 932445695</t> | ||||
</list> | ||||
This parameter set is the first entry of the precalculated parameter sets in fil | ||||
e tinymt32dc/tinymt32dc.0.1048576.txt, by Kenji Rikitake, and available at <xref | ||||
target="TinyMT-params"/>. | ||||
This is also the parameter set used in <xref target="KR12"/>. | ||||
</t> | </t> | |||
<t pn="section-2.1-4"> | ||||
<t> | The TinyMT32 PRNG reference implementation is reproduced in <xref target="fig_ti | |||
The TinyMT32 PRNG reference implementation is reproduced in <xref target="fig_ti | nymt32" format="default" sectionFormat="of" derivedContent="Figure 1"/>. | |||
nymt32"/>. | This is a C language implementation written for C99 <xref target="C99" format="d | |||
This is a C language implementation, written for C99 <xref target="C99"/>. | efault" sectionFormat="of" derivedContent="C99"/>. | |||
This reference implementation differs from the original source code as follows: | This reference implementation differs from the original source code as follows: | |||
<list style="symbols"> | ||||
<t>the original copyright and license have been removed by the original a | ||||
uthors who are now authors of this document, in accordance with BCP 78 and the I | ||||
ETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org | ||||
/license-info);</t> | ||||
<t>the source code initially spread over the tinymt32.h and tinymt32.c fi | ||||
les has been merged;</t> | ||||
<t>the unused parts of the original source code have been removed. | ||||
This is the case of the tinymt32_init_by_array() alternative initialis | ||||
ation function. | ||||
This is also the case of the period_certification() function after hav | ||||
ing checked it is not required with the chosen parameter set;</t> | ||||
<t>the unused constants TINYMT32_MEXP and TINYMT32_MUL have been removed; | ||||
</t> | ||||
<t>the appropriate parameter set has been added to the initialization fun | ||||
ction;</t> | ||||
<t>the function order has been changed;</t> | ||||
<t>certain internal variables have been renamed for compactness purposes; | ||||
</t> | ||||
<t>the const qualifier has been added to the constant definitions;</t> | ||||
<t>the code that was dependant on the representation of negative integers | ||||
by 2's complements has been replaced by a more portable version;</t> | ||||
</list> | ||||
</t> | </t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.1-5"> | ||||
<figure anchor="fig_tinymt32" title="TinyMT32 Reference Implementation"> | <li pn="section-2.1-5.1">The original authors, who are coauthors of th | |||
<artwork><![CDATA[ | is document, have | |||
<CODE BEGINS> | granted IETF | |||
the rights to publish this version with a license and copyright that are in | ||||
accordance with BCP 78 and the IETF Trust's Legal Provisions Relating to IETF | ||||
Documents (http://trustee.ietf.org/license-info).</li> | ||||
<li pn="section-2.1-5.2">The source code initially spread over the tin | ||||
ymt32.h and tinymt32.c files has been merged.</li> | ||||
<li pn="section-2.1-5.3">The unused parts of the original source code | ||||
have been removed. | ||||
This is the case of the tinymt32_init_by_array() alternative initializ | ||||
ation function. | ||||
This is also the case of the period_certification() function after hav | ||||
ing checked it is not required with the chosen parameter set.</li> | ||||
<li pn="section-2.1-5.4">The unused constants TINYMT32_MEXP and TINYMT | ||||
32_MUL have been removed.</li> | ||||
<li pn="section-2.1-5.5">The appropriate parameter set has been added | ||||
to the initialization function.</li> | ||||
<li pn="section-2.1-5.6">The function order has been changed.</li> | ||||
<li pn="section-2.1-5.7">Certain internal variables have been renamed | ||||
for compactness purposes.</li> | ||||
<li pn="section-2.1-5.8">The const qualifier has been added to the con | ||||
stant definitions.</li> | ||||
<li pn="section-2.1-5.9">The code that was dependent on the representa | ||||
tion of negative integers by 2's complements has been replaced by a more portabl | ||||
e version.</li> | ||||
</ul> | ||||
<figure anchor="fig_tinymt32" align="left" suppress-title="false" pn="fi | ||||
gure-1"> | ||||
<name slugifiedName="name-tinymt32-reference-implemen">TinyMT32 Refere | ||||
nce Implementation</name> | ||||
<sourcecode name="" type="c" markers="true" pn="section-2.1-6.1"> | ||||
/** | /** | |||
* Tiny Mersenne Twister only 127 bit internal state. | * Tiny Mersenne Twister: only 127-bit internal state. | |||
* Derived from the reference implementation version 1.1 (2015/04/24) | * Derived from the reference implementation version 1.1 (2015/04/24) | |||
* by Mutsuo Saito (Hiroshima University) and Makoto Matsumoto | * by Mutsuo Saito (Hiroshima University) and Makoto Matsumoto | |||
* (Hiroshima University). | * (Hiroshima University). | |||
*/ | */ | |||
#include <stdint.h> | #include <stdint.h> | |||
/** | /** | |||
* tinymt32 internal state vector and parameters | * tinymt32 internal state vector and parameters | |||
*/ | */ | |||
typedef struct { | typedef struct { | |||
uint32_t status[4]; | uint32_t status[4]; | |||
uint32_t mat1; | uint32_t mat1; | |||
uint32_t mat2; | uint32_t mat2; | |||
uint32_t tmat; | uint32_t tmat; | |||
} tinymt32_t; | } tinymt32_t; | |||
static void tinymt32_next_state (tinymt32_t* s); | static void tinymt32_next_state (tinymt32_t* s); | |||
static uint32_t tinymt32_temper (tinymt32_t* s); | static uint32_t tinymt32_temper (tinymt32_t* s); | |||
/** | /** | |||
* Parameter set to use for this IETF specification. Don't change. | * Parameter set to use for this IETF specification. Don't change. | |||
* This parameter set is the first entry of the precalculated | * This parameter set is the first entry of the precalculated | |||
* parameter sets in file tinymt32dc/tinymt32dc.0.1048576.txt, by | * parameter sets in tinymt32dc/tinymt32dc.0.1048576.txt by | |||
* Kenji Rikitake, available at: | * Kenji Rikitake, available at: | |||
* https://github.com/jj1bdx/tinymtdc-longbatch/ | * https://github.com/jj1bdx/tinymtdc-longbatch/. | |||
* It is also the parameter set used: | * It is also the parameter set used in: | |||
* Rikitake, K., "TinyMT Pseudo Random Number Generator for | * Rikitake, K., "TinyMT pseudo random number generator for | |||
* Erlang", ACM 11th SIGPLAN Erlang Workshop (Erlang'12), | * Erlang", Proceedings of the 11th ACM SIGPLAN Erlang Workshop, | |||
* September, 2012. | * September 2012. | |||
*/ | */ | |||
const uint32_t TINYMT32_MAT1_PARAM = UINT32_C(0x8f7011ee); | const uint32_t TINYMT32_MAT1_PARAM = UINT32_C(0x8f7011ee); | |||
const uint32_t TINYMT32_MAT2_PARAM = UINT32_C(0xfc78ff1f); | const uint32_t TINYMT32_MAT2_PARAM = UINT32_C(0xfc78ff1f); | |||
const uint32_t TINYMT32_TMAT_PARAM = UINT32_C(0x3793fdff); | const uint32_t TINYMT32_TMAT_PARAM = UINT32_C(0x3793fdff); | |||
/** | /** | |||
* This function initializes the internal state array with a | * This function initializes the internal state array with a | |||
* 32-bit unsigned integer seed. | * 32-bit unsigned integer seed. | |||
* @param s pointer to tinymt internal state. | * @param s pointer to tinymt internal state. | |||
* @param seed a 32-bit unsigned integer used as a seed. | * @param seed a 32-bit unsigned integer used as a seed. | |||
*/ | */ | |||
void tinymt32_init (tinymt32_t* s, uint32_t seed) | void tinymt32_init (tinymt32_t* s, uint32_t seed) | |||
{ | { | |||
const uint32_t MIN_LOOP = 8; | const uint32_t MIN_LOOP = 8; | |||
const uint32_t PRE_LOOP = 8; | const uint32_t PRE_LOOP = 8; | |||
s->status[0] = seed; | s->status[0] = seed; | |||
s->status[1] = s->mat1 = TINYMT32_MAT1_PARAM; | s->status[1] = s->mat1 = TINYMT32_MAT1_PARAM; | |||
s->status[2] = s->mat2 = TINYMT32_MAT2_PARAM; | s->status[2] = s->mat2 = TINYMT32_MAT2_PARAM; | |||
s->status[3] = s->tmat = TINYMT32_TMAT_PARAM; | s->status[3] = s->tmat = TINYMT32_TMAT_PARAM; | |||
for (int i = 1; i < MIN_LOOP; i++) { | for (int i = 1; i < MIN_LOOP; i++) { | |||
s->status[i & 3] ^= i + UINT32_C(1812433253) | s->status[i & 3] ^= i + UINT32_C(1812433253) | |||
* (s->status[(i - 1) & 3] | * (s->status[(i - 1) & 3] | |||
^ (s->status[(i - 1) & 3] >> 30)); | ^ (s->status[(i - 1) & 3] >> 30)); | |||
} | } | |||
/* | /* | |||
* NB: the parameter set of this specification warrants | * NB: The parameter set of this specification warrants | |||
* that none of the possible 2^^32 seeds leads to an | * that none of the possible 2^^32 seeds leads to an | |||
* all-zero 127-bit internal state. Therefore, the | * all-zero 127-bit internal state. Therefore, the | |||
* period_certification() function of the original | * period_certification() function of the original | |||
* TinyMT32 source code has been safely removed. If | * TinyMT32 source code has been safely removed. If | |||
* another parameter set is used, this function will | * another parameter set is used, this function will | |||
* have to be re-introduced here. | * have to be reintroduced here. | |||
*/ | */ | |||
for (int i = 0; i < PRE_LOOP; i++) { | for (int i = 0; i < PRE_LOOP; i++) { | |||
tinymt32_next_state(s); | tinymt32_next_state(s); | |||
} | } | |||
} | } | |||
/** | /** | |||
* This function outputs a 32-bit unsigned integer from | * This function outputs a 32-bit unsigned integer from | |||
* the internal state. | * the internal state. | |||
* @param s pointer to tinymt internal state. | * @param s pointer to tinymt internal state. | |||
* @return 32-bit unsigned integer r (0 <= r < 2^32). | * @return 32-bit unsigned integer r (0 <= r < 2^32). | |||
*/ | */ | |||
uint32_t tinymt32_generate_uint32 (tinymt32_t* s) | uint32_t tinymt32_generate_uint32 (tinymt32_t* s) | |||
{ | { | |||
tinymt32_next_state(s); | tinymt32_next_state(s); | |||
return tinymt32_temper(s); | return tinymt32_temper(s); | |||
} | } | |||
/** | /** | |||
* Internal tinymt32 constants and functions. | * Internal tinymt32 constants and functions. | |||
* Users should not call these functions directly. | * Users should not call these functions directly. | |||
*/ | */ | |||
const uint32_t TINYMT32_SH0 = 1; | const uint32_t TINYMT32_SH0 = 1; | |||
const uint32_t TINYMT32_SH1 = 10; | const uint32_t TINYMT32_SH1 = 10; | |||
const uint32_t TINYMT32_SH8 = 8; | const uint32_t TINYMT32_SH8 = 8; | |||
const uint32_t TINYMT32_MASK = UINT32_C(0x7fffffff); | const uint32_t TINYMT32_MASK = UINT32_C(0x7fffffff); | |||
/** | /** | |||
* This function changes the internal state of tinymt32. | * This function changes the internal state of tinymt32. | |||
* @param s pointer to tinymt internal state. | * @param s pointer to tinymt internal state. | |||
*/ | */ | |||
static void tinymt32_next_state (tinymt32_t* s) | static void tinymt32_next_state (tinymt32_t* s) | |||
{ | { | |||
uint32_t x; | uint32_t x; | |||
uint32_t y; | uint32_t y; | |||
y = s->status[3]; | y = s->status[3]; | |||
x = (s->status[0] & TINYMT32_MASK) | x = (s->status[0] & TINYMT32_MASK) | |||
^ s->status[1] | ^ s->status[1] | |||
^ s->status[2]; | ^ s->status[2]; | |||
x ^= (x << TINYMT32_SH0); | x ^= (x << TINYMT32_SH0); | |||
y ^= (y >> TINYMT32_SH0) ^ x; | y ^= (y >> TINYMT32_SH0) ^ x; | |||
s->status[0] = s->status[1]; | s->status[0] = s->status[1]; | |||
s->status[1] = s->status[2]; | s->status[1] = s->status[2]; | |||
s->status[2] = x ^ (y << TINYMT32_SH1); | s->status[2] = x ^ (y << TINYMT32_SH1); | |||
s->status[3] = y; | s->status[3] = y; | |||
/* | /* | |||
* The if (y & 1) {...} block below replaces: | * The if (y & 1) {...} block below replaces: | |||
* s->status[1] ^= -((int32_t)(y & 1)) & s->mat1; | * s->status[1] ^= -((int32_t)(y & 1)) & s->mat1; | |||
* s->status[2] ^= -((int32_t)(y & 1)) & s->mat2; | * s->status[2] ^= -((int32_t)(y & 1)) & s->mat2; | |||
* The adopted code is equivalent to the original code | * The adopted code is equivalent to the original code | |||
* but does not depend on the representation of negative | * but does not depend on the representation of negative | |||
* integers by 2's complements. It is therefore more | * integers by 2's complements. It is therefore more | |||
* portable, but includes an if-branch which may slow | * portable but includes an if branch, which may slow | |||
* down the generation speed. | * down the generation speed. | |||
*/ | */ | |||
if (y & 1) { | if (y & 1) { | |||
s->status[1] ^= s->mat1; | s->status[1] ^= s->mat1; | |||
s->status[2] ^= s->mat2; | s->status[2] ^= s->mat2; | |||
} | } | |||
} | } | |||
/** | /** | |||
* This function outputs a 32-bit unsigned integer from | * This function outputs a 32-bit unsigned integer from | |||
* the internal state. | * the internal state. | |||
* @param s pointer to tinymt internal state. | * @param s pointer to tinymt internal state. | |||
* @return 32-bit unsigned pseudo-random number. | * @return 32-bit unsigned pseudorandom number. | |||
*/ | */ | |||
static uint32_t tinymt32_temper (tinymt32_t* s) | static uint32_t tinymt32_temper (tinymt32_t* s) | |||
{ | { | |||
uint32_t t0, t1; | uint32_t t0, t1; | |||
t0 = s->status[3]; | t0 = s->status[3]; | |||
t1 = s->status[0] + (s->status[2] >> TINYMT32_SH8); | t1 = s->status[0] + (s->status[2] >> TINYMT32_SH8); | |||
t0 ^= t1; | t0 ^= t1; | |||
/* | /* | |||
* The if (t1 & 1) {...} block below replaces: | * The if (t1 & 1) {...} block below replaces: | |||
* t0 ^= -((int32_t)(t1 & 1)) & s->tmat; | * t0 ^= -((int32_t)(t1 & 1)) & s->tmat; | |||
* The adopted code is equivalent to the original code | * The adopted code is equivalent to the original code | |||
* but does not depend on the representation of negative | * but does not depend on the representation of negative | |||
* integers by 2's complements. It is therefore more | * integers by 2's complements. It is therefore more | |||
* portable, but includes an if-branch which may slow | * portable but includes an if branch, which may slow | |||
* down the generation speed. | * down the generation speed. | |||
*/ | */ | |||
if (t1 & 1) { | if (t1 & 1) { | |||
t0 ^= s->tmat; | t0 ^= s->tmat; | |||
} | } | |||
return t0; | return t0; | |||
} | } | |||
<CODE ENDS> | </sourcecode> | |||
]]></artwork> | </figure> | |||
</figure> | </section> | |||
<section anchor="tinymt32_usage" numbered="true" toc="include" removeInRFC | ||||
</section> | ="false" pn="section-2.2"> | |||
<name slugifiedName="name-tinymt32-usage">TinyMT32 Usage</name> | ||||
<section anchor="tinymt32_usage" title="TinyMT32 Usage"> | <t pn="section-2.2-1"> | |||
<!-- ====================== --> | This PRNG <bcp14>MUST</bcp14> first be initialized with the following function: | |||
</t> | ||||
<t> | <ul empty="true" spacing="normal" bare="false" pn="section-2.2-2"> | |||
This PRNG MUST first be initialized with the following function: | <li pn="section-2.2-2.1">void tinymt32_init (tinymt32_t* s, uint32_t | |||
<list style="empty"> | seed);</li> | |||
<t>void tinymt32_init (tinymt32_t* s, uint32_t seed);</t> | </ul> | |||
</list> | <t pn="section-2.2-3"> | |||
It takes as input a 32-bit unsigned integer used as a seed (note that value 0 is permitted by TinyMT32). | It takes as input a 32-bit unsigned integer used as a seed (note that value 0 is permitted by TinyMT32). | |||
This function also takes as input a pointer to an instance of a tinymt32_t struc | This function also takes as input a pointer to an instance of a tinymt32_t | |||
ture that needs to be allocated by the caller but left uninitialized. | structure that needs to be allocated by the caller but is left uninitialized. | |||
This structure will then be updated by the various TinyMT32 functions in order t o keep the internal state of the PRNG. | This structure will then be updated by the various TinyMT32 functions in order t o keep the internal state of the PRNG. | |||
The use of this structure admits several instances of this PRNG to be used in pa rallel, each of them having its own instance of the structure. | The use of this structure admits several instances of this PRNG to be used in pa rallel, each of them having its own instance of the structure. | |||
</t> | </t> | |||
<t pn="section-2.2-4"> | ||||
<t> | Then, each time a new 32-bit pseudorandom unsigned integer between 0 and 2<sup>3 | |||
Then, each time a new 32-bit pseudo-random unsigned integer between 0 and 2^32 - | 2</sup> - 1 inclusive is needed, the following function is used: | |||
1 inclusive is needed, the following function is used: | </t> | |||
<list style="empty"> | <ul empty="true" spacing="normal" bare="false" pn="section-2.2-5"> | |||
<t>uint32_t tinymt32_generate_uint32 (tinymt32_t * s);</t> | <li pn="section-2.2-5.1">uint32_t tinymt32_generate_uint32 (tinymt32_t | |||
</list> | * s);</li> | |||
</ul> | ||||
<t pn="section-2.2-6"> | ||||
Of course, the tinymt32_t structure must be left unchanged by the caller between successive calls to this function. | Of course, the tinymt32_t structure must be left unchanged by the caller between successive calls to this function. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="tinymt32_validation" numbered="true" toc="include" remove | |||
InRFC="false" pn="section-2.3"> | ||||
<section anchor="tinymt32_validation" title="Specific Implementation Vali | <name slugifiedName="name-specific-implementation-val">Specific Implemen | |||
dation and Deterministic Behavior"> | tation Validation and Deterministic Behavior</name> | |||
<!-- ====================== --> | <t pn="section-2.3-1"> | |||
For a given seed, PRNG determinism can be a requirement (e.g., with <xref target | ||||
<t> | ="RFC8681" format="default" sectionFormat="of" derivedContent="RFC8681"/>). | |||
PRNG determinism, for a given seed, can be a requirement (e.g., with <xref targe | Consequently, any implementation of the TinyMT32 PRNG in line with this specific | |||
t="RLC-ID"/>). | ation <bcp14>MUST</bcp14> have the same output as that provided by the reference | |||
Consequently, any implementation of the TinyMT32 PRNG in line with this specific | implementation of <xref target="fig_tinymt32" format="default" sectionFormat="o | |||
ation MUST have the same output as that provided by the reference implementation | f" derivedContent="Figure 1"/>. | |||
of <xref target="fig_tinymt32"/>. | ||||
In order to increase the compliancy confidence, this document proposes the follo wing criteria. | In order to increase the compliancy confidence, this document proposes the follo wing criteria. | |||
Using a seed value of 1, the first 50 values returned by tinymt32_generate_uint3 2(s) as 32-bit unsigned integers | Using a seed value of 1, the first 50 values returned by tinymt32_generate_uint3 2(s) as 32-bit unsigned integers | |||
are equal to values provided in <xref target="fig_tinymt32_out"/>, to be read li | are equal to the values provided in <xref target="fig_tinymt32_out" format="defa | |||
ne by line. | ult" sectionFormat="of" derivedContent="Figure 2"/>, which | |||
are to be read line by line. | ||||
Note that these values come from the tinymt/check32.out.txt file provided by the PRNG authors to validate implementations | Note that these values come from the tinymt/check32.out.txt file provided by the PRNG authors to validate implementations | |||
of TinyMT32, as part of the MersenneTwister-Lab/TinyMT Github repository. | of TinyMT32 as part of the MersenneTwister-Lab/TinyMT GitHub repository. | |||
</t> | </t> | |||
<figure anchor="fig_tinymt32_out" align="left" suppress-title="false" pn | ||||
<figure anchor="fig_tinymt32_out" title="First 50 decimal values (to be read per | ="figure-2"> | |||
line) returned by tinymt32_generate_uint32(s) as 32-bit unsigned integers, with | <name slugifiedName="name-first-50-decimal-values-to-">First 50 decima | |||
a seed value of 1."> | l values (to be read per line) returned by tinymt32_generate_uint32(s) as 32-bit | |||
<artwork><![CDATA[ | unsigned integers, with a seed value of 1</name> | |||
<artwork name="" type="" align="left" alt="" pn="section-2.3-2.1"> | ||||
2545341989 981918433 3715302833 2387538352 3591001365 | 2545341989 981918433 3715302833 2387538352 3591001365 | |||
3820442102 2114400566 2196103051 2783359912 764534509 | 3820442102 2114400566 2196103051 2783359912 764534509 | |||
643179475 1822416315 881558334 4207026366 3690273640 | 643179475 1822416315 881558334 4207026366 3690273640 | |||
3240535687 2921447122 3984931427 4092394160 44209675 | 3240535687 2921447122 3984931427 4092394160 44209675 | |||
2188315343 2908663843 1834519336 3774670961 3019990707 | 2188315343 2908663843 1834519336 3774670961 3019990707 | |||
4065554902 1239765502 4035716197 3412127188 552822483 | 4065554902 1239765502 4035716197 3412127188 552822483 | |||
161364450 353727785 140085994 149132008 2547770827 | 161364450 353727785 140085994 149132008 2547770827 | |||
4064042525 4078297538 2057335507 622384752 2041665899 | 4064042525 4078297538 2057335507 622384752 2041665899 | |||
2193913817 1080849512 33160901 662956935 642999063 | 2193913817 1080849512 33160901 662956935 642999063 | |||
3384709977 1723175122 3866752252 521822317 2292524454 | 3384709977 1723175122 3866752252 521822317 2292524454 | |||
]]></artwork> | </artwork> | |||
</figure> | </figure> | |||
<t pn="section-2.3-3"> | ||||
<t> | In particular, the deterministic behavior of the <xref target="fig_tinymt32" for | |||
In particular, the deterministic behavior of the <xref target="fig_tinymt32"/> s | mat="default" sectionFormat="of" derivedContent="Figure 1"/> source code has bee | |||
ource code has been checked across several platforms: | n checked across several platforms: | |||
high-end laptops running 64-bits Mac OSX and Linux/Ubuntu; | high-end laptops running 64-bit Mac OS X and Linux/Ubuntu; | |||
a board featuring a 32-bits ARM Cortex-A15 and running 32-bit Linux/Ubuntu; | a board featuring a 32-bit ARM Cortex-A15 and running 32-bit Linux/Ubuntu; | |||
several embedded cards featuring either an ARM Cortex-M0+, a Cortex-M3 or a Cort | several embedded cards featuring either an ARM Cortex-M0+, a Cortex-M3, or a Cor | |||
ex-M4 32-bit microcontroller, all of them running RIOT <xref target="Baccelli18" | tex-M4 32-bit microcontroller, all of them running RIOT <xref target="Baccelli18 | |||
/>; | " format="default" sectionFormat="of" derivedContent="Baccelli18"/>; | |||
two low-end embedded cards featuring either a 16-bit microcontroller (TI MSP430) | two low-end embedded cards featuring either a 16-bit microcontroller (TI MSP430) | |||
or a 8-bit microcontroller (Arduino ATMEGA2560), both of them running RIOT. | or an 8-bit microcontroller (Arduino ATMEGA2560), both of them running RIOT. | |||
</t> | </t> | |||
<t pn="section-2.3-4"> | ||||
<t> | This specification only outputs 32-bit unsigned pseudorandom numbers and does no | |||
This specification only outputs 32-bit unsigned pseudo-random numbers and does n | t try to map this output to a smaller integer range (e.g., between 10 and 49 inc | |||
ot try to map this output to a smaller integer range (e.g., between 10 and 49 in | lusive). | |||
clusive). | If a specific use case needs such a mapping, it will have to provide its own fun | |||
If a specific use-case needs such a mapping, it will have to provide its own fun | ction. | |||
ction. | In that case, if PRNG determinism is also required, the use of a floating point | |||
In that case, if PRNG determinism is also required, the use of floating point (s | (single or double precision) to perform this mapping should probably be | |||
ingle or double precision) to perform this mapping should probably be avoided, t | avoided, as these calculations may lead to different rounding errors across diff | |||
hese calculations leading potentially to different rounding errors across differ | erent target platforms. | |||
ent target platforms. | Great care should also be taken to not introduce biases in the randomness of the | |||
Great care should also be put on not introducing biases in the randomness of the | mapped output (which may be the case with some mapping algorithms) incompatible | |||
mapped output (it may be the case with some mapping algorithms) incompatible wi | with the use-case requirements. | |||
th the use-case requirements. | The details of how to perform such a mapping are out of scope of this document. | |||
The details of how to perform such a mapping are out-of-scope of this document. | ||||
</t> | </t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="SecurityConsiderations" numbered="true" toc="include" remov | ||||
</section> | eInRFC="false" pn="section-3"> | |||
<name slugifiedName="name-security-considerations">Security Considerations | ||||
<!-- =========================================================================== | </name> | |||
================ --> | <t pn="section-3-1"> | |||
The authors do not believe the present specification generates specific | ||||
<section anchor="SecurityConsiderations" title="Security Considerations"> | security risks per se. However, the TinyMT and MT PRNG must not be used for | |||
<!-- ====================== --> | cryptographic applications. | |||
<t> | ||||
The authors do not believe the present specification generates specific security | ||||
risks per se. | ||||
However, neither the TinyMT nor MT PRNG are meant to be used for cryptographic a | ||||
pplications. | ||||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="iana" numbered="true" toc="include" removeInRFC="false" pn= | |||
"section-4"> | ||||
<section anchor="iana" title="IANA Considerations"> | <name slugifiedName="name-iana-considerations">IANA Considerations</name> | |||
<!-- ====================== --> | <t pn="section-4-1"> | |||
This document has no IANA actions. | ||||
<t> | ||||
This document does not require any IANA action. | ||||
</t> | </t> | |||
</section> | ||||
</section> | </middle> | |||
<back> | ||||
<section title="Acknowledgments"> | <references pn="section-5"> | |||
<!-- ====================== --> | <name slugifiedName="name-references">References</name> | |||
<references pn="section-5.1"> | ||||
<t> | <name slugifiedName="name-normative-references">Normative References</na | |||
The authors would like to thank Belkacem Teibi with whom we explored TinyMT32 sp | me> | |||
ecificities when looking to an alternative to the Park-Miller Linear Congruentia | <reference anchor="C99" quoteTitle="true" derivedAnchor="C99"> | |||
l PRNG. | <front> | |||
The authors would like to thank | <title>Programming languages - C: C99, correction 3:2007</title> | |||
Carl Wallace, Stewart Bryant, Greg Skinner, Mike Heard, the three TSVWG chairs, | <seriesInfo name="ISO/IEC" value="9899:1999/Cor 3:2007"/> | |||
Wesley Eddy, our shepherd, David Black and Gorry Fairhurst, as well as Spencer D | <author> | |||
awkins and Mirja Kuhlewind. | <organization showOnFrontPage="true">International Organization fo | |||
Last but not least, the authors are really grateful to the IESG members, in part | r Standardization</organization> | |||
icular Benjamin Kaduk, Eric Rescorla, Adam Roach, Roman Danyliw, Barry Leiba, Ma | </author> | |||
rtin Vigoureux, Eric Vyncke for their highly valuable feedbacks that greatly con | <date month="November" year="2007"/> | |||
tributed to improve this specification. | </front> | |||
</reference> | ||||
<reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | ||||
119" quoteTitle="true" derivedAnchor="RFC2119"> | ||||
<front> | ||||
<title>Key words for use in RFCs to Indicate Requirement Levels</tit | ||||
le> | ||||
<author initials="S." surname="Bradner" fullname="S. Bradner"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="1997" month="March"/> | ||||
<abstract> | ||||
<t>In many standards track documents several words are used to sig | ||||
nify the requirements in the specification. These words are often capitalized. | ||||
This document defines these words as they should be interpreted in IETF document | ||||
s. This document specifies an Internet Best Current Practices for the Internet | ||||
Community, and requests discussion and suggestions for improvements.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="2119"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
</reference> | ||||
<reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | ||||
174" quoteTitle="true" derivedAnchor="RFC8174"> | ||||
<front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
tle> | ||||
<author initials="B." surname="Leiba" fullname="B. Leiba"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2017" month="May"/> | ||||
<abstract> | ||||
<t>RFC 2119 specifies common key words that may be used in protoco | ||||
l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
t only UPPERCASE usage of the key words have the defined special meanings.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="8174"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
</reference> | ||||
</references> | ||||
<references pn="section-5.2"> | ||||
<name slugifiedName="name-informative-references">Informative References | ||||
</name> | ||||
<reference anchor="AdaptiveCrush" target="http://www.math.sci.hiroshima- | ||||
u.ac.jp/~m-mat/MT/ADAPTIVE" quoteTitle="true" derivedAnchor="AdaptiveCrush"> | ||||
<front> | ||||
<title>Automation of Statistical Tests on Randomness to Obtain Clear | ||||
er Conclusion</title> | ||||
<seriesInfo name="DOI" value="10.1007/978-3-642-04107-5_26"/> | ||||
<author initials="H." surname="Haramoto"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="November" year="2009"/> | ||||
</front> | ||||
<refcontent>Monte Carlo and Quasi-Monte Carlo Methods 2008</refcontent | ||||
> | ||||
</reference> | ||||
<reference anchor="Baccelli18" quoteTitle="true" target="https://doi.org | ||||
/10.1109/JIOT.2018.2815038" derivedAnchor="Baccelli18"> | ||||
<front> | ||||
<title>RIOT: An Open Source Operating System for Low-End Embedded De | ||||
vices in the IoT</title> | ||||
<seriesInfo name="DOI" value="10.1109/JIOT.2018.2815038"/> | ||||
<author initials="E." surname="Baccelli"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Gundogan"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="O." surname="Hahm"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="P." surname="Kietzmann"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M. S." surname="Lenders"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H." surname="Petersen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="K." surname="Schleiser"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="T. C." surname="Schmidt"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Wahlisch"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="December" year="2018"/> | ||||
</front> | ||||
<refcontent>IEEE Internet of Things Journal, Volume 5, Issue 6</refcon | ||||
tent> | ||||
</reference> | ||||
<reference anchor="KR12" quoteTitle="true" target="https://doi.org/10.11 | ||||
45/2364489.2364504" derivedAnchor="KR12"> | ||||
<front> | ||||
<title>TinyMT pseudo random number generator for Erlang</title> | ||||
<seriesInfo name="DOI" value="10.1145/2364489.2364504"/> | ||||
<author initials="K." surname="Rikitake"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="September" year="2012"/> | ||||
</front> | ||||
<refcontent>Proceedings of the 11th ACM SIGPLAN Erlang Workshop, pp. 6 | ||||
7-72</refcontent> | ||||
</reference> | ||||
<reference anchor="MT98" quoteTitle="true" target="https://doi.org/10.11 | ||||
45/272991.272995" derivedAnchor="MT98"> | ||||
<front> | ||||
<title>Mersenne twister: A 623-dimensionally equidistributed uniform | ||||
pseudo-random number generator</title> | ||||
<seriesInfo name="DOI" value="10.1145/272991.272995"/> | ||||
<author initials="M." surname="Matsumoto"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="T." surname="Nishimura"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="1998"/> | ||||
</front> | ||||
<refcontent>ACM Transactions on Modeling and Computer Simulation (TOMA | ||||
CS), Volume 8, Issue 1, pp. 3-30</refcontent> | ||||
</reference> | ||||
<reference anchor="PTVF92" quoteTitle="true" derivedAnchor="PTVF92"> | ||||
<front> | ||||
<title>Numerical recipes in C (2nd ed.): the art of scientific compu | ||||
ting</title> | ||||
<seriesInfo name="ISBN" value="0-521-43108-5"/> | ||||
<author initials="W." surname="Press"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S." surname="Teukolsky"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="W." surname="Vetterling"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B." surname="Flannery"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="1992"/> | ||||
</front> | ||||
<refcontent>Cambridge University Press</refcontent> | ||||
</reference> | ||||
<reference anchor="RFC5170" target="https://www.rfc-editor.org/info/rfc5 | ||||
170" quoteTitle="true" derivedAnchor="RFC5170"> | ||||
<front> | ||||
<title>Low Density Parity Check (LDPC) Staircase and Triangle Forwar | ||||
d Error Correction (FEC) Schemes</title> | ||||
<author initials="V." surname="Roca" fullname="V. Roca"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Neumann" fullname="C. Neumann"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Furodet" fullname="D. Furodet"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2008" month="June"/> | ||||
<abstract> | ||||
<t>This document describes two Fully-Specified Forward Error Corre | ||||
ction (FEC) Schemes, Low Density Parity Check (LDPC) Staircase and LDPC Triangle | ||||
, and their application to the reliable delivery of data objects on the packet e | ||||
rasure channel (i.e., a communication path where packets are either received wit | ||||
hout any corruption or discarded during transmission). These systematic FEC cod | ||||
es belong to the well- known class of "Low Density Parity Check" codes, and are | ||||
large block FEC codes in the sense of RFC 3453. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5170"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5170"/> | ||||
</reference> | ||||
<reference anchor="RFC8681" target="https://www.rfc-editor.org/info/rfc8 | ||||
681" quoteTitle="true" derivedAnchor="RFC8681"> | ||||
<front> | ||||
<title>Sliding Window Random Linear Code (RLC) Forward Erasure Corre | ||||
ction (FEC) Schemes for FECFRAME</title> | ||||
<seriesInfo name="RFC" value="8681"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8681"/> | ||||
<author initials="V" surname="Roca" fullname="Vincent Roca"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B" surname="Teibi" fullname="Belkacem Teibi"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2020"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="TestU01" target="http://simul.iro.umontreal.ca/testu0 | ||||
1/tu01.html" quoteTitle="true" derivedAnchor="TestU01"> | ||||
<front> | ||||
<title>TestU01: A C library for empirical testing of random number g | ||||
enerators</title> | ||||
<seriesInfo name="DOI" value="10.1145/1268776.1268777"/> | ||||
<author initials="P." surname="L'Ecuyer"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Simard"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="August" year="2007"/> | ||||
</front> | ||||
<refcontent>ACM Transactions on Mathematical Software (TOMS), Volume 3 | ||||
3, Issue 4, Article 22</refcontent> | ||||
</reference> | ||||
<reference anchor="TinyMT-dev" target="https://github.com/MersenneTwiste | ||||
r-Lab/TinyMT" quoteTitle="true" derivedAnchor="TinyMT-dev"> | ||||
<front> | ||||
<title>Tiny Mersenne Twister (TinyMT)</title> | ||||
<seriesInfo name="commit" value="9d7ca3c"/> | ||||
<author/> | ||||
<date month="March" year="2018"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="TinyMT-params" target="https://github.com/jj1bdx/tiny | ||||
mtdc-longbatch" quoteTitle="true" derivedAnchor="TinyMT-params"> | ||||
<front> | ||||
<title>TinyMT pre-calculated parameter list</title> | ||||
<seriesInfo name="commit" value="30079eb"/> | ||||
<author/> | ||||
<date month="March" year="2013"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="TinyMT-web" target="http://www.math.sci.hiroshima-u.a | ||||
c.jp/~m-mat/MT/TINYMT/" quoteTitle="true" derivedAnchor="TinyMT-web"> | ||||
<front> | ||||
<title>Tiny Mersenne Twister (TinyMT)</title> | ||||
<author fullname="Mutsuo Saito" initials="M" surname="Saito"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author fullname="Makoto Matsumoto" initials="M" surname="Matsumoto" | ||||
> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
</references> | ||||
<section numbered="false" toc="include" removeInRFC="false" pn="section-appe | ||||
ndix.a"> | ||||
<name slugifiedName="name-acknowledgments">Acknowledgments</name> | ||||
<t pn="section-appendix.a-1"> | ||||
The authors would like to thank Belkacem Teibi, with whom we explored TinyMT32 | ||||
specificities when looking to an alternative to the Park-Miller Linear | ||||
Congruential PRNG. The authors would also like to thank Carl Wallace; Stewart | ||||
Bryant; Greg Skinner; Mike Heard; the three TSVWG chairs, Wesley Eddy (our | ||||
shepherd), David Black, and Gorry Fairhurst; as well as Spencer Dawkins and | ||||
Mirja Kuehlewind. Last but not least, the authors are really grateful to the | ||||
IESG members, in particular Benjamin Kaduk, Eric Rescorla, Adam Roach, Roman | ||||
Danyliw, Barry Leiba, Martin Vigoureux, and Eric Vyncke for their highly | ||||
valuable feedback that greatly contributed to improving this specification. | ||||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc | |||
="include" pn="section-appendix.b"> | ||||
</middle> | <name slugifiedName="name-authors-addresses">Authors' Addresses</name> | |||
<author fullname="Mutsuo Saito" initials="M" surname="Saito"> | ||||
<back> | <organization showOnFrontPage="true">Hiroshima University</organization> | |||
<references title="Normative References"> | <address> | |||
<!-- ====================== --> | <postal> | |||
&rfc2119; | <street/> | |||
&rfc8174; | <city/> | |||
<country>Japan</country> | ||||
<reference anchor="C99"> | </postal> | |||
<front> | <email>saito@math.sci.hiroshima-u.ac.jp</email> | |||
<title>Programming languages - C: C99, correction 3:2007</title> | </address> | |||
<author /> | </author> | |||
<date month="November" year="2007" /> | <author fullname="Makoto Matsumoto" initials="M" surname="Matsumoto"> | |||
</front> | <organization showOnFrontPage="true">Hiroshima University</organization> | |||
<seriesInfo name="International Organization for Standardization," value | <address> | |||
="ISO/IEC 9899:1999/Cor 3:2007" /> | <postal> | |||
</reference> | <street/> | |||
<city/> | ||||
</references> | <country>Japan</country> | |||
</postal> | ||||
<references title="Informative References"> | <email>m-mat@math.sci.hiroshima-u.ac.jp</email> | |||
<!-- ====================== --> | </address> | |||
</author> | ||||
&rfc5170; | <author fullname="Vincent Roca" initials="V" surname="Roca" role="editor"> | |||
<organization showOnFrontPage="true">INRIA</organization> | ||||
<reference anchor="TinyMT-web" target="http://www.math.sci.hiroshima-u.ac. | <address> | |||
jp/~m-mat/MT/TINYMT/"> | <postal> | |||
<front> | <street/> | |||
<title>Tiny Mersenne Twister (TinyMT) web site</title> | <city/> | |||
<author fullname="Mutsuo Saito" initials="M" surname="Saito"><organiza | <code/> | |||
tion /> </author> | <extaddr>Univ. Grenoble Alpes</extaddr> | |||
<author fullname="Makoto Matsumoto" initials="M" surname="Matsumoto">< | <country>France</country> | |||
organization /> </author> | </postal> | |||
<date /> | <email>vincent.roca@inria.fr</email> | |||
</front> | </address> | |||
</reference> | </author> | |||
<author fullname="Emmanuel Baccelli" initials="E" surname="Baccelli"> | ||||
<reference anchor="TinyMT-dev" target="https://github.com/MersenneTwister- | <organization showOnFrontPage="true">INRIA</organization> | |||
Lab/TinyMT"> | <address> | |||
<front> | <postal> | |||
<title>Tiny Mersenne Twister (TinyMT) github site</title> | <street/> | |||
<author fullname="Mutsuo Saito" initials="M" surname="Saito"><organiza | <city/> | |||
tion /> </author> | <code/> | |||
<author fullname="Makoto Matsumoto" initials="M" surname="Matsumoto">< | <country>France</country> | |||
organization /> </author> | </postal> | |||
<date /> | <email>emmanuel.baccelli@inria.fr</email> | |||
</front> | </address> | |||
</reference> | </author> | |||
</section> | ||||
<reference anchor="TinyMT-params" target="https://github.com/jj1bdx/tinymt | </back> | |||
dc-longbatch/"> | ||||
<front> | ||||
<title>TinyMT pre-calculated parameter list github site</title> | ||||
<author fullname="Kenji Rikitake" initials="K" surname="Rikitake"><org | ||||
anization /> </author> | ||||
<date /> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="RLC-ID" target="https://tools.ietf.org/html/draft-ietf- | ||||
tsvwg-rlc-fec-scheme"> | ||||
<front> | ||||
<title>Sliding Window Random Linear Code (RLC) Forward Erasure Correct | ||||
ion (FEC) Scheme for FECFRAME</title> | ||||
<author initials="V" surname="Roca" fullname="Vincent Roca"> <organiza | ||||
tion /> </author> | ||||
<author initials="B" surname="Teibi" fullname="Belkacem Teibi"> <organ | ||||
ization /> </author> | ||||
<date month="February" year="2019" /> | ||||
</front> | ||||
<seriesInfo name='Work in' value='Progress' /> | ||||
<seriesInfo name='Transport Area Working Group (TSVWG)' value='draft-iet | ||||
f-tsvwg-rlc-fec-scheme (Work in Progress)' /> | ||||
</reference> | ||||
<reference anchor="MT98"> | ||||
<front> | ||||
<title>Mersenne Twister: A 623-dimensionally equidistributed uniform ps | ||||
eudorandom number generator</title> | ||||
<author initials="M." surname="Matsumoto"> <organization /></author> | ||||
<author initials="T." surname="Nishimura"> <organization /></author> | ||||
<date month="January" year="1998" /> | ||||
</front> | ||||
<seriesInfo name="" value="ACM Transactions on Modeling and Computer Sim | ||||
ulation (TOMACS), Volume 8 Issue 1, Jan. 1998, pp.3-30, January 1998, DOI:10.114 | ||||
5/272991.272995" /> | ||||
</reference> | ||||
<reference anchor="KR12"> | ||||
<front> | ||||
<title>TinyMT Pseudo Random Number Generator for Erlang</title> | ||||
<author initials="K." surname="Rikitake"> | ||||
<organization /> | ||||
</author> | ||||
<date month="September" year="2012" /> | ||||
</front> | ||||
<seriesInfo name="" value="ACM 11th SIGPLAN Erlang Workshop (Erlang'12), | ||||
September 14, 2012, Copenhagen, Denmark, DOI: http://dx.doi.org/10.1145/2364489 | ||||
.2364504" /> | ||||
</reference> | ||||
<reference anchor="Baccelli18"> | ||||
<front> | ||||
<title>RIOT: An Open Source Operating System for Low-End Embedded Devic | ||||
es in the IoT</title> | ||||
<author initials="E." surname="Baccelli"> <organization /> </author> | ||||
<author initials="C." surname="Gundogan"> <organization /> </author> | ||||
<author initials="O." surname=" Hahm"> <organization /> </author> | ||||
<author initials="P." surname=" Kietzmann"> <organization /> </author> | ||||
<author initials="M. S." surname=" Lenders"> <organization /> </author | ||||
> | ||||
<author initials="H." surname=" Petersen"> <organization /> </author> | ||||
<author initials="K." surname="Schleiser"> <organization /> </author> | ||||
<author initials="T. C." surname=" Schmidt"> <organization /> </author | ||||
> | ||||
<author initials="M." surname="Wahlisch"> <organization /> </author> | ||||
<date month="December" year="2018" /> | ||||
</front> | ||||
<seriesInfo name="" value="IEEE Internet of Things Journal (Volume 5, Is | ||||
sue 6), DOI: 10.1109/JIOT.2018.2815038" /> | ||||
</reference> | ||||
<reference anchor="PTVF92"> | ||||
<front> | ||||
<title>Numerical Recipies in C; Second Edition</title> | ||||
<author initials="W." surname="Press"> <organization /> </author> | ||||
<author initials="S." surname="Teukolsky"> <organization /> </author> | ||||
<author initials="W." surname="Vetterling"> <organization /> </author> | ||||
<author initials="B." surname="Flannery"> <organization /> </author> | ||||
<date year="1992" /> | ||||
</front> | ||||
<seriesInfo name="Cambridge University Press," value="ISBN: 0-521-43108- | ||||
5" /> | ||||
</reference> | ||||
<reference anchor="TestU01" target="http://simul.iro.umontreal.ca/testu01/ | ||||
tu01.html"> | ||||
<front> | ||||
<title>TestU01: A C Library for Empirical Testing of Random Number Gene | ||||
rators</title> | ||||
<author initials="P." surname="L'Ecuyer"> <organization /> </author> | ||||
<author initials="R." surname="Simard"> <organization /> </author> | ||||
<date month="" year="2007" /> | ||||
</front> | ||||
<seriesInfo name="" value="ACM Transactions on Mathematical Software, Vo | ||||
l. 33, article 22, 2007" /> | ||||
</reference> | ||||
<reference anchor="AdaptiveCrush" target="http://www.math.sci.hiroshima-u. | ||||
ac.jp/~m-mat/MT/ADAPTIVE/"> | ||||
<front> | ||||
<title>Automation of statistical tests on randomness to obtain clearer | ||||
conclusion</title> | ||||
<author initials="H." surname="Haramoto"> <organization /> </author> | ||||
<date month="November" year="2009" /> | ||||
</front> | ||||
<seriesInfo name="" value="Monte Carlo and Quasi-Monte Carlo Methods 200 | ||||
8, DOI:10.1007/978-3-642-04107-5_26" /> | ||||
</reference> | ||||
</references> | ||||
<!-- ====================== --> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 47 change blocks. | ||||
552 lines changed or deleted | 824 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |