doc: add moar docs
This commit is contained in:
		
							parent
							
								
									9078742c29
								
							
						
					
					
						commit
						f20f1cc398
					
				
					 12 changed files with 226 additions and 43 deletions
				
			
		|  | @ -20,7 +20,7 @@ Timestamp: Updated yyyy/mm/dd | |||
| # These are indexes you deleted, so Natural Docs will not add them again | ||||
| # unless you remove them from this line. | ||||
| 
 | ||||
| Don't Index: Classes, Macros, Variables | ||||
| Don't Index: Classes, Variables, Macros | ||||
| 
 | ||||
| 
 | ||||
| # -------------------------------------------------------------------------- | ||||
|  | @ -47,8 +47,8 @@ File: Introduction  (docs/intro.txt) | |||
| Link: Source Code  (https://git.cute.engineering/d0p1/StupidOS) | ||||
| File: Coding Style  (docs/coding-style.txt) | ||||
| File: FAQ  (docs/faq.txt) | ||||
| Link: StupidFS  (https://stupidfs.d0p1.eu/) | ||||
| File: Common Object File Format &lparen;COFF&rparen;  (docs/COFF.txt) | ||||
| Link: StupidFS  (https://stupidfs.d0p1.eu/) | ||||
| 
 | ||||
| Group: BootLoader  { | ||||
| 
 | ||||
|  | @ -153,11 +153,6 @@ Group: Lib  { | |||
| 
 | ||||
|       File: rc4.asm  (no auto-title, lib/crypto/rc4/rc4.asm) | ||||
| 
 | ||||
|       Group: chacha20  { | ||||
| 
 | ||||
|          File: chacha20.asm  (lib/crypto/chacha20/chacha20.asm) | ||||
|          }  # Group: chacha20 | ||||
| 
 | ||||
|       Group: Dilithium  { | ||||
| 
 | ||||
|          File: ntt.asm  (lib/crypto/dilithium/ntt.asm) | ||||
|  | @ -168,6 +163,9 @@ Group: Lib  { | |||
|          File: sha256.asm  (lib/crypto/sha2/sha256.asm) | ||||
|          }  # Group: SHA2 | ||||
| 
 | ||||
|       File: xchacha.asm  (lib/crypto/xchacha/xchacha.asm) | ||||
|       File: chacha.asm  (lib/crypto/chacha/chacha.asm) | ||||
|       File: hchacha.asm  (lib/crypto/hchacha/hchacha.asm) | ||||
|       }  # Group: Crypto | ||||
| 
 | ||||
|    File: ctype  (no auto-title, lib/c/ctype.asm) | ||||
|  |  | |||
|  | @ -1,4 +1,6 @@ | |||
| 	;; File: stpdfs.inc | ||||
| 	 | ||||
| 	;; Section: Stupid Filesystem | ||||
| 	;; | ||||
| 	;; > ┌──────────┬───────────┬──────┬───┬──────┬────┬───┬────┐ | ||||
| 	;; > │Boot block│Super block│Inodes│...│Inodes│Data│...│Data│ | ||||
|  | @ -15,12 +17,16 @@ STPDFS_SB_REV   = 1 | |||
| STPDFS_BSIZE    = 512 | ||||
| 	;; Constant: STPDFS_BADINO | ||||
| 	;; StupidFS bad inode | ||||
| STPDBOOT_BADINO = 0 | ||||
| STPDFS_BADINO = 0 | ||||
| 	;; Constant: STPDFS_ROOTINO | ||||
| 	;; StupidFS root inode | ||||
| 	;; StupidFS root inode number | ||||
| STPDFS_ROOTINO  = 1 | ||||
| 	;; Constant: STPDFS_NDIRECT | ||||
| 	;; Number of direct block (7) | ||||
| STPDFS_NDIRECT  = 7 | ||||
| 	;; Constant: STPDFS_INDIRECT_PER_BLOCK | ||||
| STPDFS_INDIRECT_PER_BLOCK = STPDFS_BSIZE / 4 | ||||
| 
 | ||||
| 	;; Constant: STPDFS_NAME_MAX | ||||
| 	;; Max file name length (28) | ||||
| STPDFS_NAME_MAX = 28 | ||||
|  | @ -33,8 +39,28 @@ STPDFS_CLEANLY_UNMOUNTED = 0 | |||
| STPDFS_ERROR             = 1 | ||||
| STPDFS_DIRTY             = 1 | ||||
| 
 | ||||
| 	;; Enum: StupidFS i-node flags | ||||
| 	;; STPDFS_INO_FLAG_ALOC - I-node is allocated | ||||
| 	;; STPDFS_INO_FLAG_LZP  - I-node data is compressed using LZP algorithm (see <lzp.asm>) | ||||
| 	;; STPDFS_INO_FLAG_ENC  - I-node data is encrypted with XChaCha12 (see <xchacha.asm>) | ||||
| STPDFS_INO_FLAG_ALOC = 0x8000 | ||||
| STPDFS_INO_FLAG_LZP  = 0x0001 | ||||
| STPDFS_INO_FLAG_ENC  = 0x0002 | ||||
| 
 | ||||
| 	;; Constant: STPDFS_INODE_PER_BLOCK | ||||
| 	;; I-node per block | ||||
| STPDFS_INODE_PER_BLOCK = sizeof.StpdFS_Inode / STPDFS_BSIZE | ||||
| 
 | ||||
| 	;; Constant: STPDFS_DIRENT_PER_BLOCK | ||||
| 	;; Directory entry per block | ||||
| STPDFS_DIRENT_PER_BLOCK = sizeof.StpdFS_Dirent / STPDFS_BSIZE | ||||
| 
 | ||||
| 
 | ||||
| 	;; Struc: StpdFS_FreeList | ||||
| 	;; | ||||
| 	;; .free  - List of free block (0-99), index 0 point to next freelist | ||||
| 	;; .nfree - Index | ||||
| 	;; | ||||
| 	;; > ┌──────────┐                                                      | ||||
| 	;; > │ block 99 │                               | ||||
| 	;; > ├──────────┤                               | ||||
|  | @ -84,15 +110,15 @@ DEFN StpdFS_Sb | |||
| 	;; Struc: StpdFS_Inode | ||||
| 	;; StupidFS on disk i-node | ||||
| 	;; | ||||
| 	;; .mode    - TODO | ||||
| 	;; .nlink   - TODO | ||||
| 	;; .uid     - TODO | ||||
| 	;; .gid     - TODO | ||||
| 	;; .flags   - TODO | ||||
| 	;; .size    - Date size in byte | ||||
| 	;; .zone    - TODO | ||||
| 	;; .actime  - TODO | ||||
| 	;; .modtime - TODO | ||||
| 	;; .mode    - File mode | ||||
| 	;; .nlink   - Links count | ||||
| 	;; .uid     - Owner Uid | ||||
| 	;; .gid     - Group Id | ||||
| 	;; .flags   - File flags, see <StupidFS i-node flags> | ||||
| 	;; .size    - Data size in byte | ||||
| 	;; .zone    - See bellow | ||||
| 	;; .actime  - Access time (64-bit UNIX timestamp) | ||||
| 	;; .modtime - Modification time (64-bit UNIX timestamp) | ||||
| 	;; | ||||
| 	;; | ||||
| 	;; Zone 0-6 are direct, zone 7 indirect, zone 8 double indirect, zone 9 triple indirect | ||||
|  | @ -110,17 +136,17 @@ DEFN StpdFS_Sb | |||
| 	;; > │zone 7├─────────►│        │      │        │                                       | ||||
| 	;; > ├──────┤          └────────┘      └────────┘                                       | ||||
| 	;; > │zone 8├───────┐                                                                   | ||||
| 	;; > ├──────┤       │Double indirect┌─────────┐    ┌────────┐    ┌─────────┐            | ||||
| 	;; > │zone 9│       └──────────────►│         ├───►│        ├───►│         │            | ||||
| 	;; > └──┬───┘                       │         │    │        │    │ Data    │            | ||||
| 	;; >    │                           │         │    │        │    │         │            | ||||
| 	;; >    │                           └─────────┘    └────────┘    └─────────┘            | ||||
| 	;; > ├──────┤       │Double indirect┌────────┐    ┌────────┐    ┌────────┐            | ||||
| 	;; > │zone 9│       └──────────────►│        ├───►│        ├───►│        │            | ||||
| 	;; > └──┬───┘                       │        │    │        │    │ Data   │            | ||||
| 	;; >    │                           │        │    │        │    │        │            | ||||
| 	;; >    │                           └────────┘    └────────┘    └────────┘            | ||||
| 	;; >    │ Triple indirect ┌────────┐                                                    | ||||
| 	;; >    └────────────────►│        │    ┌──────────┐      ┌─────────┐      ┌──────────┐ | ||||
| 	;; >                      │        ├───►│          │      │         │      │          │ | ||||
| 	;; >                      │        │    │          ├─────►│         ├─────►│ Data     │ | ||||
| 	;; >                      └────────┘    │          │      │         │      │          │ | ||||
| 	;; >                                    └──────────┘      └─────────┘      └──────────┘ | ||||
| 	;; >    └────────────────►│        │    ┌────────┐      ┌────────┐      ┌────────┐ | ||||
| 	;; >                      │        ├───►│        │      │        │      │        │ | ||||
| 	;; >                      │        │    │        ├─────►│        ├─────►│ Data   │ | ||||
| 	;; >                      └────────┘    │        │      │        │      │        │ | ||||
| 	;; >                                    └────────┘      └────────┘      └────────┘ | ||||
| struc StpdFS_Inode { | ||||
| 	.mode    dw ? | ||||
| 	.nlink   dw ? | ||||
|  | @ -134,8 +160,9 @@ struc StpdFS_Inode { | |||
| } | ||||
| DEFN StpdFS_Inode | ||||
| 
 | ||||
| 
 | ||||
| 	;; Struc: StpdFS_Dirent | ||||
| 	;; StupidFS dir entry | ||||
| 	;; StupidFS directory entry | ||||
| 	;; | ||||
| 	;; .inode - address of i-node | ||||
| 	;; .name  - null terminated file name (see <STPDFS_NAME_MAX>) | ||||
|  | @ -145,8 +172,6 @@ struc StpdFS_Dirent { | |||
| } | ||||
| DEFN StpdFS_Dirent | ||||
| 
 | ||||
| STPDFS_DIRENT_PER_BLOCK = sizeof.StpdFS_Dirent / STPDFS_BSIZE | ||||
| 
 | ||||
| 	; ------------------------------------------------------------------------ | ||||
| 
 | ||||
| 	;; Section: Implementation | ||||
|  |  | |||
|  | @ -1,18 +1,27 @@ | |||
| 	;; File: xv6fs.inc | ||||
| 	;; | ||||
| 	;; Usefull links: | ||||
| 	;; - <https://github.com/mit-pdos/xv6-riscv/blob/riscv/kernel/fs.h> | ||||
| 	;; - <xv6 book at https://pdos.csail.mit.edu/6.1810/2023/xv6/book-riscv-rev3.pdf> | ||||
| 	;; | ||||
| 	;; Section: xv6 Filesystem | ||||
| 	;; | ||||
| 	;; > ┌──────────┬───────────┬───┬───┬───┬──────┬───┬──────┬──────┬───┬──────┬────┬───┬────┐ | ||||
| 	;; > │Boot block│Super block│Log│...│Log│Inodes│...│Inodes│Bitmap│...│Bitmap│Data│...│Data│ | ||||
| 	;; > └──────────┴───────────┴───┴───┴───┴──────┴───┴──────┴──────┴───┴──────┴────┴───┴────┘ | ||||
| 	;; | ||||
| 	;; Usefull links: | ||||
| 	;; - <https://github.com/mit-pdos/xv6-riscv/blob/riscv/kernel/fs.h> | ||||
| 	;; - <xv6 book at https://pdos.csail.mit.edu/6.1810/2023/xv6/book-riscv-rev3.pdf> | ||||
| 
 | ||||
| 	;; Constant: XV6FS_BSIZE | ||||
| 	;; xv6 Filesystem block size (1024) | ||||
| XV6FS_BSIZE     = 1024 | ||||
| 	;; Constant: XV6FS_ROOTINO | ||||
| 	;; root inode number | ||||
| XV6FS_ROOTINO   = 1 | ||||
| 	;; Constant: XV6FS_MAGIC | ||||
| 	;; Superblock magic number, MUST BE `0x10203040` | ||||
| XV6FS_MAGIC     = 0x10203040 | ||||
| 	;; Constant: XV6FS_NDIRECT | ||||
| 	;; Number of direct block (12) | ||||
| XV6FS_NDIRECT   = 12 | ||||
| XV6FS_NINDIRECT = (XV6FS_BSIZE / 4) | ||||
| XV6FS_MAXFILE   = (XV6FS_NDIRECT + XV6FS_NINDIRECT) | ||||
|  | @ -20,6 +29,16 @@ XV6FS_IPB       = (XV6FS_BSIZE / 64) | |||
| XV6FS_DIRSIZE   = 14  | ||||
| 
 | ||||
| 	;; Struc: Xv6FS_Sb | ||||
| 	;; xv6FS superblock | ||||
| 	;; | ||||
| 	;; .magic      - See <XV6FS_MAGIC> | ||||
| 	;; .size       - TODO | ||||
| 	;; .nblock     - TODO | ||||
| 	;; .ninodes    - TODO | ||||
| 	;; .nlog       - TODO | ||||
| 	;; .nlogstart  - TODO | ||||
| 	;; .inodestart - TODO | ||||
| 	;; .bmapstart  - TODO | ||||
| struc Xv6FS_Sb { | ||||
| 	.magic      dd ? | ||||
| 	.size       dd ? | ||||
|  | @ -33,6 +52,14 @@ struc Xv6FS_Sb { | |||
| DEFN Xv6FS_Sb | ||||
| 
 | ||||
| 	;; Struc: Xv6FS_Inode | ||||
| 	;; xv6FS on disk i-node | ||||
| 	;; | ||||
| 	;; .type  - TODO | ||||
| 	;; .major - TODO | ||||
| 	;; .minor - TODO | ||||
| 	;; .nlink - TODO | ||||
| 	;; .size  - TODO | ||||
| 	;; .addrs - TODO | ||||
| struc Xv6FS_Inode { | ||||
| 	.type  dw ? | ||||
| 	.major dw ? | ||||
|  | @ -44,6 +71,7 @@ struc Xv6FS_Inode { | |||
| DEFN Xv6FS_Inode | ||||
| 
 | ||||
| 	;; Struc: Xv6FS_Dirent | ||||
| 	;; xv6FS directory entry | ||||
| struc Xv6FS_Dirent { | ||||
| 	.inum dw ? | ||||
| 	.name db XV6FS_DIRSIZE dup(?) | ||||
|  |  | |||
|  | @ -1,13 +1,16 @@ | |||
| TARGET	= libcrypto.a | ||||
| OBJS	= sha2/sha256.o sha2/sha512.o \
 | ||||
| 			chacha20/chacha20.o | ||||
| 			chacha/chacha.o \
 | ||||
| 			hchacha/hchacha.o | ||||
| INCS	= sha2/sha2.h \
 | ||||
| 			chacha20/chacha20.h \
 | ||||
| 			chacha/chacha.h \
 | ||||
| 			hchacha/hchacha.h \
 | ||||
| 			dilithium/dilithium.h \
 | ||||
| 			falcon/falcon.h \
 | ||||
| 			keccak/keccak.h | ||||
| ASMS	= sha2/sha2.inc \
 | ||||
| 			chacha20/chacha20.inc | ||||
| 			chacha/chacha.inc \
 | ||||
| 			hchacha/hchacha.inc | ||||
| 
 | ||||
| INCCRYPOTDIR = $(INCDIR)/crypto | ||||
| ASMCRYPTODIR = $(ASMDIR)/crypto | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| 	;; File: chacha20.asm | ||||
| 	;; File: chacha.asm | ||||
| 	 | ||||
| 	; https://en.wikipedia.org/wiki/Salsa20#ChaCha_variant | ||||
| 	; https://datatracker.ietf.org/doc/html/rfc7539 | ||||
|  | @ -6,7 +6,7 @@ | |||
| 	format COFF | ||||
| 	use32 | ||||
| 
 | ||||
| 	include 'chacha20.inc' | ||||
| 	include 'chacha.inc' | ||||
| 	virtual at 0 | ||||
| 		ctx ChaCha20Ctx | ||||
| 	end virtual | ||||
							
								
								
									
										96
									
								
								lib/crypto/hchacha/hchacha.asm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								lib/crypto/hchacha/hchacha.asm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,96 @@ | |||
| 	;; File: hchacha.asm | ||||
| 
 | ||||
| CHACHA_CONST1 = 0x61707865 | ||||
| CHACHA_CONST2 = 0x3320646e | ||||
| CHACHA_CONST3 = 0x3320646e | ||||
| CHACHA_CONST4 = 0x6b206574 | ||||
| 
 | ||||
| macro TO_LE32 { | ||||
| 	movzx ecx, byte [eax+1] | ||||
| 	sal ecx, 8 | ||||
| 	movzx edx, byte [eax+2] | ||||
| 	sal edx, 16 | ||||
| 	or edx, ecx | ||||
| 	movzx ecx, byte [eax] | ||||
| 	or edx, ecx | ||||
| 	movzx ecx, byte [eax+3] | ||||
| 	sal ecx, 24 | ||||
| 	or ecx, edx | ||||
| } | ||||
| 
 | ||||
| hchacha: | ||||
| 	push ebp | ||||
| 	mov ebp, esp | ||||
| 	sub esp, 4*4*4 | ||||
| 
 | ||||
| 	mov [ebp-64], dword CHACHA_CONST1 | ||||
| 	mov [ebp-60], dword CHACHA_CONST2 | ||||
| 	mov [ebp-56], dword CHACHA_CONST3 | ||||
| 	mov [ebp-52], dword CHACHA_CONST4 | ||||
| 
 | ||||
| 	mov eax, [ebp+12] | ||||
| 
 | ||||
| 	; key | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-48], ecx | ||||
| 
 | ||||
| 	; key + 4 | ||||
| 	add eax, 4 | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-44], ecx | ||||
| 
 | ||||
| 	; key + 4 * 2 | ||||
| 	add eax, 4 | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-40], ecx | ||||
| 
 | ||||
| 	; key + 4 * 3 | ||||
| 	add eax, 4 | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-36], ecx | ||||
| 
 | ||||
| 	; key + 16 | ||||
| 	add eax, 4 | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-32], ecx | ||||
| 
 | ||||
| 	; key + 16 + 4 | ||||
| 	add eax, 4 | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-28], ecx | ||||
| 
 | ||||
| 	; key + 16 + 4 * 2 | ||||
| 	add eax, 4 | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-24], ecx | ||||
| 
 | ||||
| 	; key + 16 + 4 * 3 | ||||
| 	add eax, 4 | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-20], ecx | ||||
| 
 | ||||
| 	; nonce | ||||
| 	mov eax, [ebp+16]  | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-16], ecx | ||||
| 
 | ||||
| 	; nonce + 4 | ||||
| 	add eax, 4 | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-12], ecx | ||||
| 
 | ||||
| 	; nonce + 8 | ||||
| 	add eax, 4 | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-8], ecx | ||||
| 
 | ||||
| 	add eax, 4 | ||||
| 	TO_LE32 | ||||
| 	mov [ebp-4], ecx | ||||
| 
 | ||||
| 	;; round | ||||
| 
 | ||||
| 	;; out | ||||
| 
 | ||||
| 	leave | ||||
| 	ret | ||||
							
								
								
									
										22
									
								
								lib/crypto/hchacha/hchacha.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								lib/crypto/hchacha/hchacha.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| #ifndef CRYPTO_HCHACHA_H | ||||
| # define CRYPTO_HCHACHA_H 1 | ||||
| 
 | ||||
| # include <stdint.h> | ||||
| 
 | ||||
| # define HCHACHA_OUT_BYTES   32 | ||||
| # define HCHACHA_KEY_BYTES   32 | ||||
| # define HCHACHA_NONCE_BYTES 16 | ||||
| 
 | ||||
| void hchacha(uint8_t out[HCHACHA_OUT_BYTES], | ||||
| 			const uint8_t key[HCHACHA_KEY_BYTES], | ||||
| 			const uint8_t nonce[HCHACHA_NONCE_BYTES], int round); | ||||
| 
 | ||||
| void hchacha12(uint8_t out[HCHACHA_OUT_BYTES], | ||||
| 			const uint8_t key[HCHACHA_KEY_BYTES], | ||||
| 			const uint8_t nonce[HCHACHA_NONCE_BYTES]); | ||||
| 
 | ||||
| void hchacha20(uint8_t out[HCHACHA_OUT_BYTES], | ||||
| 			const uint8_t key[HCHACHA_KEY_BYTES], | ||||
| 			const uint8_t nonce[HCHACHA_NONCE_BYTES]); | ||||
| 
 | ||||
| #endif /* !CRYPTO_HCHACHA_H */ | ||||
							
								
								
									
										7
									
								
								lib/crypto/hchacha/hchacha.inc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								lib/crypto/hchacha/hchacha.inc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| HCHACHA_OUT_BYTES   = 32 | ||||
| HCHACHA_KEY_BYTES   = 32 | ||||
| HCHACHA_NONCE_BYTES = 16 | ||||
| 
 | ||||
| 	public hchacha | ||||
| 	public hchacha12 | ||||
| 	public hchacha20 | ||||
							
								
								
									
										3
									
								
								lib/crypto/xchacha/xchacha.asm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								lib/crypto/xchacha/xchacha.asm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| 	;; File: xchacha.asm | ||||
| 	;; eXtended-nonce ChaCha cipher | ||||
| 	;; | ||||
|  | @ -1,8 +1,9 @@ | |||
| 	;; File: lzp.asm | ||||
| 	 | ||||
| 	; Lempel-Ziv + Prediction (a fast, efficient, and memory-use | ||||
| 	; conservative compression algorithm) | ||||
| 	; (paper: https://ieeexplore.ieee.org/document/488353) | ||||
| 	;; *Lempel-Ziv + Prediction* (a fast, efficient, and memory-use | ||||
| 	;; conservative compression algorithm) | ||||
| 	;; | ||||
| 	;; (paper: https://ieeexplore.ieee.org/document/488353) | ||||
| 
 | ||||
| 	format COFF | ||||
| 	use32 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue