Skip to content

Commit

Permalink
Pseudorandom function generators
Browse files Browse the repository at this point in the history
  • Loading branch information
cr0mll committed Aug 30, 2023
1 parent 840e83f commit 107cc72
Show file tree
Hide file tree
Showing 224 changed files with 701 additions and 612 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Pseudorandom Functions
In order to understand what a pseudorandom function generator (PRFG) is, one needs to understand what it means for a function to be random or pseudorandom.

A truly random function $H: \{0,1\}^S \to \{0,1\}^{l_{\textit{out}}}$ is a function chosen according to the uniform distribution of all functions that take a string of length $S$ and output a string of length $\{0,1\}^{l_{\textit{out}}}$. Alternatively, a random function can be thought of as a function which outputs a random string of length $l_{\textit{out}}$ for every input $i \in \{0,1\}^S$, called an *input data block (IDB)*. This can be pictured as a table of all possible IDBs and their corresponding, at the beginning undetermined, outputs. Whenever $H$ is invoked with an IDB $i$, that IDB is looked up in the table. If its entry already has an output, then this value is directly returned. Otherwise, the function $H$ "flips a coin" $l_{\textit{out}}$ times to determine each bit of the output, fills the generated output in the table and finally returns it. Subsequent queries for the same input data block will provide the already generated output.

![](Resources/Images/Random%20Function.svg)

```admonish note
The input to a PRF may sometimes be treated as an integer between $0$ and $2^S - 1$, which can be represented as a binary string of length $S$. In these cases, it is called an *index* instead of an input data block.
```

The reason that these two notions of a random function are equivalent is that each "coin toss" can be thought of as making a step forward in search for the function $H$ which on input a specific $i$ outputs a specific output $o$. Before the first coin flip, there are $2^{l_{\text{out}}}$ possible outputs. After the first coin flip, there are $2^{l_{\text{out}} - 1}$ possible outputs - the first bit $b_0$ has been generated and the output has the form $b_0\cdots$ where the dots represent the remaining $l_{\text{out}} - 1$ bits, which are unknown. After the second flip, the output has two bits generated and $l_{\text{out}} - 2$ unknown bits - there are $2^{l_{\text{out}} - 2}$ remaining possibilities for the final output string. Each coin flip halves the number of possibilities for the output until the final flip settles on a single output. Since a function can only have a single output for a given input, deciding this output is like picking a function from all possible functions. The probability that we get a specific function $H$ is $\frac{1}{2^{l_{\text{out}}}}$ - the same as if simply choosing a function from a uniform distribution.

```admonish note
A random function is still *deterministic* in the sense that when input the same data block it will always give the same output.
```

Unfortunately, truly random functions present a great implementational challenge for classical computers due to their difficulty in obtaining true randomness. A computer cannot really "flip a coin $l_{\textit{out}}$ times" and is limited by its external [randomness sources](../Private-Key%20Cryptography/Security%20Notions/Randomness.md).

This is why we have to settle for *pseudorandom functions*.

```admonish danger title="Definition: Pseudorandom Function (PRF)"
A *pseudorandom function* is an efficient algorithm $\textit{PRF}(idb: \mathbf{str}[S]) \to \mathbf{str}[l_{\textit{out}}]$ such that for every efficient distinguisher $D(\textit{func}: \textbf{function<}\mathbf{str}[S] \to \mathbf{str}[l_{\textit{out}}]\textbf{>}) \to \mathbf{bit}$ it holds that
$$\left|\Pr[D(\textit{PRF}) = 1] - \Pr_{H \leftarrow_R \{0,1\}^S \to \{0,1\}^{l_{\text{out}}}}[D(H) = 1]\right| \le \epsilon(S)$$
for some negligible $\epsilon$.
```

```admonish tip title="Definition Breakdown"
The distinguisher $D(\textit{func}: \textbf{function<}\mathbf{str}[S] \to \mathbf{str}[l_{\text{out}}]\textbf{>}$ takes a function whose inputs are strings of length $S$ and which outputs a string of length $l_{\text{out}}$ and tries to determine if the function is a truly random function. This notation means that the distinguisher has *oracle access* to the function - it can freely query the function with any inputs and can inspect the resulting outputs. Sometimes, the objectively worse notation $D^f(1^S)$ is also used to denote that the distinguisher $D$ has oracle access to the function $f$.
A function is pseudorandom if there is no efficient distinguisher which can tell the difference between it and a truly random function $H$ which was chosen from the uniform distribution of all functions $\{0,1\}^S \to \{0,1\}^{l_{\text{out}}}$ with non-negligible probability.
```

Pseudorandom functions are useful because they are a generalisation of [pseudorandom generators](index.md). The length of the output of a PRG must always be greater than the length of its seed, but PRFs allow for an output whose length is independent of the input data block. Mostly, however, they are useful because they produce pseudorandom strings, just like PRGs.

But as with most things in cryptography, it is unknown if pseudorandom functions actually exist. The definition is quite broad in the sense that there should be absolutely no distinguisher which can tell that the function is actually not truly random - a pretty difficult thing to do. So, once again, we are forced to hope that they do exist because otherwise cryptography falls apart - we consider a given algorithm to be a pseudorandom function until someone strings along and proves us wrong. Nevertheless, we still want to make as few assumptions as possible and build the rest on top of it.

```admonish question title="Assumption: Existence of a One-Bit Pseudorandom Function"
There exists a pseudorandom function $\textit{PRF}(idb: \mathbf{str}[S]) \to \mathbf{bit}$ which outputs a single bit, i.e. $l_{\text{out}} = 1$.
```

As it turns out, such a pseudorandom function can be used to construct PRFs with any output length.

# Pseudorandom Function Generators (PRFGs)
[Pseudorandom generators](index.md) produces pseudorandom strings, while pseudorandom function generators (PRFGs) produce pseudorandom functions.

```admonish danger title="Definition: Pseudorandom Function Generator (PRFG)"
A *pseudorandom function generator (PRFG)* is an efficient algorithm $\textit{PRFG}(seed: \textbf{str}[S]) \to \textbf{function<}\textbf{int}[0..2^S-1] \to \textbf{str}[l_{\text{out}}]\textbf{>}$ which takes a seed $s \in \{0,1\}^S$ and outputs a pseudorandom function whose input is a data block of size $S$ and whose output is a string of length $l_{\text{out}}$.
```
```admonish tip title="Definition Breakdown"
A pseudorandom function generator takes a seed and produces a pseudorandom function. The resulting function takes input data blocks with the same length $S$ as the PRFG's seed and its outputs have length $l_{\text{out}}$. It is common to notate a PRF that was produced by PRFG as $f_s$ where $f$ is the function's name and $s$ is the seed used to obtain it.
```

It is important to remember that the output of a PRFG is a *function*. Specifically, a PRFG produces a function which takes inputs of the same size as the PRFG's seed. This coincidence has unfortunately led to PRFs and PRFGs commonly being mixed up. It is common to see a PRFG as a two input algorithm $\textit{PRFG}(seed: \textbf{str}[S], idb: \textbf{str}[S]) \to l_{\text{out}}$ that takes a seed $s$ *and* an input data block $i$ and acts like a pseudorandom function $f_s(i)$. In this case, $\textit{PRFG}(s,i)$ internally obtains the function $f$ from the seed $s$ and then passes it the data block $i$. Finally, the PRFG returns the output of the function $f$.

```rust
fn PRFG(seed: str[S], idb: str[S]) -> str[l_out] {
let f = get_function_from_seed(seed);
return f(idb);
}
```

This file was deleted.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion Notes/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@
- [Hash Functions](Cryptography/Hash%20Functions/index.md)
- [Public-Key Cryptography](Cryptography/Public-Key%20Cryptography/index.md)
- [Pseudorandom Generators (PRGs)](Cryptography/Pseudorandom%20Generators%20(PRGs)/index.md)
- [Pseudorandom Functions (PRFs)](Cryptography/Pseudorandom%20Generators%20(PRGs)/Pseudorandom%20Functions%20(PRFs).md)
- [Pseudorandom Function Generators (PRFGs)](Cryptography/Pseudorandom%20Generators%20(PRGs)/Pseudorandom%20Function%20Generators%20(PRFGs).md)
- [Private-Key Cryptography](Cryptography/Private-Key%20Cryptography/index.md)
- [Stream Ciphers](Cryptography/Private-Key%20Cryptography/Stream%20Ciphers/index.md)
- [Hardware-Oriented Stream Ciphers](Cryptography/Private-Key%20Cryptography/Stream%20Ciphers/Hardware-Oriented%20Stream%20Ciphers/index.md)
Expand Down
2 changes: 1 addition & 1 deletion docs/404.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Cryptography/Breaking Classical Cryptrography.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Cryptography/Computer Science Prerequisites.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Cryptography/Hash Functions/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Cryptography/Mathematical Prerequisites.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions docs/Cryptography/Private-Key Cryptography/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

This file was deleted.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions docs/Cryptography/Pseudorandom Generators (PRGs)/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Cryptography/Public-Key Cryptography/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Cryptography/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Cyberclopaedia/Contributing.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Cyberclopaedia/License.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Cyberclopaedia/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Binary Exploitation/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/DNS/DNS Cache Poisoning.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/DNS/DNS Traffic Amplification.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/DNS/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/CRLF Injection.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/Cross-Site Request Forgery.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/Cross-Site Scripting (XSS).html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/HTTP Parameter Pollution.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/HTTP Response Splitting.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/Host Header Injection.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/Open Redirect.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/PHP Object Injection.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/SQL Injection/Cheatsheets.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/SQL Injection/Defences.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/SQL Injection/Finding SQLi.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/SQL Injection/Introduction.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/SQL Injection/Union injections.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/SQL Injection/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/Template Injection.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/WebSockets.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Web/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Windows/SCF File Attacks.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/Windows/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Exploitation/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Hardware Hacking/Wireless Attacks/Deauth Attack.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Hardware Hacking/Wireless Attacks/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Hardware Hacking/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Networking/Network Address Translation (NAT).html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Networking/Networks/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Networking/Protocols/Ethernet (IEEE 802.3).html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Networking/Protocols/Network Time Protocol (NTP).html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Networking/Protocols/Server Message Block (SMB).html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Networking/Protocols/WLAN (IEEE 802.11)/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Networking/Protocols/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Networking/Subnetting.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Networking/VLANs.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Networking/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Post Exploitation/Active Directory (AD)/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Post Exploitation/Enumeration/Linux/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Post Exploitation/Enumeration/Windows/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Post Exploitation/Enumeration/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Post Exploitation/Pivoting/SSH Tunneling.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Post Exploitation/Pivoting/Tunneling with Chisel.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Post Exploitation/Pivoting/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Post Exploitation/Privilege Escalation/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Post Exploitation/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/Enumeration/FTP Enumeration (21).html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/Enumeration/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/Enumeration/nmap/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/OSINT/Domain Name Enumeration.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/OSINT/Google Dorks.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/OSINT/Harvesting E-Mails.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/OSINT/Instagram User Enumeration.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/OSINT/Tools/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/OSINT/Tools/recon-ng.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/OSINT/Tools/theHarvester.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/OSINT/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reconnaissance/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Assembly Programming/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Assembly.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Binary Formats/ELF/Sections.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Binary Formats/ELF/Segments.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Binary Formats/ELF/Symbols.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Binary Formats/ELF/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Binary Formats/PE/NT Headers.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Binary Formats/PE/Sections.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Binary Formats/PE/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Binary Formats/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Program Anatomy/Instructions.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Program Anatomy/Registers.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Program Anatomy/The Heap.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Program Anatomy/The Stack.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/Program Anatomy/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/Reverse Engineering/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/System Internals/Linux/Command Line.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/System Internals/Linux/File System.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/System Internals/Linux/Processes.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/System Internals/Linux/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/System Internals/Windows/File System.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/System Internals/Windows/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/System Internals/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/index.html

Large diffs are not rendered by default.

178 changes: 105 additions & 73 deletions docs/print.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/searchindex.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/searchindex.json

Large diffs are not rendered by default.

0 comments on commit 107cc72

Please sign in to comment.