Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
osv
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Verlässliche Systemsoftware
projects
osv
Commits
6363cebe
Commit
6363cebe
authored
12 years ago
by
Guy Zana
Browse files
Options
Downloads
Patches
Plain Diff
Ported arc4random.c, make arc4random() available
parent
660b7401
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
bsd/net.cc
+2
-0
2 additions, 0 deletions
bsd/net.cc
bsd/sys/libkern/arc4random.c
+19
-11
19 additions, 11 deletions
bsd/sys/libkern/arc4random.c
bsd/sys/sys/libkern.h
+1
-142
1 addition, 142 deletions
bsd/sys/sys/libkern.h
with
22 additions
and
153 deletions
bsd/net.cc
+
2
−
0
View file @
6363cebe
...
...
@@ -2,6 +2,7 @@
extern
"C"
{
#include
<bsd/porting/netport.h>
#include
<bsd/sys/sys/libkern.h>
#include
<bsd/sys/sys/eventhandler.h>
#include
<bsd/sys/sys/mbuf.h>
#include
<bsd/sys/net/netisr.h>
...
...
@@ -15,6 +16,7 @@ extern "C" {
void
net_init
(
void
)
{
debug
(
"Initializing network stack..."
);
arc4_init
();
eventhandler_init
(
NULL
);
mbuf_init
(
NULL
);
netisr_init
(
NULL
);
...
...
This diff is collapsed.
Click to expand it.
bsd/sys/libkern/arc4random.c
+
19
−
11
View file @
6363cebe
...
...
@@ -9,17 +9,16 @@
*/
#include
<sys/cdefs.h>
__FBSDID
(
"$FreeBSD$"
);
#include
<bsd/porting/netport.h>
#include
<bsd/porting/sync_stub.h>
#include
<sys/types.h>
#include
<sys/param.h>
#include
<sys/kernel.h>
#include
<sys/random.h>
#include
<sys/libkern.h>
#include
<sys/lock.h>
#include
<sys/mutex.h>
#include
<sys/time.h>
#include
<bsd/sys/sys/param.h>
#include
<bsd/sys/sys/libkern.h>
#define ARC4_RESEED_BYTES 65536
#define ARC4_RESEED_SECONDS 300
#define ARC4_KEYBYTES (256 / 8)
...
...
@@ -32,6 +31,16 @@ static struct mtx arc4_mtx;
static
u_int8_t
arc4_randbyte
(
void
);
uint8_t
read_random_gen
=
0
;
static
int
read_random
(
uint8_t
*
buf
,
int
count
)
{
for
(
int
i
=
0
;
i
<
count
;
i
++
)
{
buf
[
i
]
=
read_random_gen
++
;
}
return
(
count
);
}
static
__inline
void
arc4_swap
(
u_int8_t
*
a
,
u_int8_t
*
b
)
{
...
...
@@ -57,7 +66,7 @@ arc4_randomstir (void)
* device is not loaded -- MarkM.
*/
r
=
read_random
(
key
,
ARC4_KEYBYTES
);
getmicro
up
time
(
&
tv_now
);
getmicrotime
(
&
tv_now
);
mtx_lock
(
&
arc4_mtx
);
/* If r == 0 || -1, just use what was on the stack. */
if
(
r
>
0
)
{
...
...
@@ -88,8 +97,7 @@ arc4_randomstir (void)
/*
* Initialize our S-box to its beginning defaults.
*/
static
void
arc4_init
(
void
)
void
arc4_init
(
void
)
{
int
n
;
...
...
@@ -129,7 +137,7 @@ arc4rand(void *ptr, u_int len, int reseed)
u_char
*
p
;
struct
timeval
tv
;
getmicro
up
time
(
&
tv
);
getmicrotime
(
&
tv
);
if
(
reseed
||
(
arc4_numruns
>
ARC4_RESEED_BYTES
)
||
(
tv
.
tv_sec
>
arc4_t_reseed
))
...
...
This diff is collapsed.
Click to expand it.
bsd/sys/sys/libkern.h
+
1
−
142
View file @
6363cebe
...
...
@@ -35,156 +35,15 @@
#include
<sys/cdefs.h>
#include
<sys/types.h>
#ifdef _KERNEL
#include
<sys/systm.h>
#endif
#ifndef LIBKERN_INLINE
#define LIBKERN_INLINE static __inline
#define LIBKERN_BODY
#endif
/* BCD conversions. */
extern
u_char
const
bcd2bin_data
[];
extern
u_char
const
bin2bcd_data
[];
extern
char
const
hex2ascii_data
[];
#define bcd2bin(bcd) (bcd2bin_data[bcd])
#define bin2bcd(bin) (bin2bcd_data[bin])
#define hex2ascii(hex) (hex2ascii_data[hex])
static
__inline
int
imax
(
int
a
,
int
b
)
{
return
(
a
>
b
?
a
:
b
);
}
static
__inline
int
imin
(
int
a
,
int
b
)
{
return
(
a
<
b
?
a
:
b
);
}
static
__inline
long
lmax
(
long
a
,
long
b
)
{
return
(
a
>
b
?
a
:
b
);
}
static
__inline
long
lmin
(
long
a
,
long
b
)
{
return
(
a
<
b
?
a
:
b
);
}
static
__inline
u_int
max
(
u_int
a
,
u_int
b
)
{
return
(
a
>
b
?
a
:
b
);
}
static
__inline
u_int
min
(
u_int
a
,
u_int
b
)
{
return
(
a
<
b
?
a
:
b
);
}
static
__inline
quad_t
qmax
(
quad_t
a
,
quad_t
b
)
{
return
(
a
>
b
?
a
:
b
);
}
static
__inline
quad_t
qmin
(
quad_t
a
,
quad_t
b
)
{
return
(
a
<
b
?
a
:
b
);
}
static
__inline
u_long
ulmax
(
u_long
a
,
u_long
b
)
{
return
(
a
>
b
?
a
:
b
);
}
static
__inline
u_long
ulmin
(
u_long
a
,
u_long
b
)
{
return
(
a
<
b
?
a
:
b
);
}
static
__inline
off_t
omax
(
off_t
a
,
off_t
b
)
{
return
(
a
>
b
?
a
:
b
);
}
static
__inline
off_t
omin
(
off_t
a
,
off_t
b
)
{
return
(
a
<
b
?
a
:
b
);
}
static
__inline
int
abs
(
int
a
)
{
return
(
a
<
0
?
-
a
:
a
);
}
static
__inline
long
labs
(
long
a
)
{
return
(
a
<
0
?
-
a
:
a
);
}
static
__inline
quad_t
qabs
(
quad_t
a
)
{
return
(
a
<
0
?
-
a
:
a
);
}
/* Prototypes for non-quad routines. */
struct
malloc_type
;
void
arc4_init
(
void
)
;
uint32_t
arc4random
(
void
);
void
arc4rand
(
void
*
ptr
,
u_int
len
,
int
reseed
);
int
bcmp
(
const
void
*
,
const
void
*
,
size_t
);
void
*
bsearch
(
const
void
*
,
const
void
*
,
size_t
,
size_t
,
int
(
*
)(
const
void
*
,
const
void
*
));
#ifndef HAVE_INLINE_FFS
int
ffs
(
int
);
#endif
#ifndef HAVE_INLINE_FFSL
int
ffsl
(
long
);
#endif
#ifndef HAVE_INLINE_FLS
int
fls
(
int
);
#endif
#ifndef HAVE_INLINE_FLSL
int
flsl
(
long
);
#endif
int
fnmatch
(
const
char
*
,
const
char
*
,
int
);
int
locc
(
int
,
char
*
,
u_int
);
void
*
memchr
(
const
void
*
s
,
int
c
,
size_t
n
);
int
memcmp
(
const
void
*
b1
,
const
void
*
b2
,
size_t
len
);
void
qsort
(
void
*
base
,
size_t
nmemb
,
size_t
size
,
int
(
*
compar
)(
const
void
*
,
const
void
*
));
void
qsort_r
(
void
*
base
,
size_t
nmemb
,
size_t
size
,
void
*
thunk
,
int
(
*
compar
)(
void
*
,
const
void
*
,
const
void
*
));
u_long
random
(
void
);
char
*
index
(
const
char
*
,
int
);
char
*
rindex
(
const
char
*
,
int
);
int
scanc
(
u_int
,
const
u_char
*
,
const
u_char
*
,
int
);
int
skpc
(
int
,
int
,
char
*
);
void
srandom
(
u_long
);
int
strcasecmp
(
const
char
*
,
const
char
*
);
char
*
strcat
(
char
*
__restrict
,
const
char
*
__restrict
);
int
strcmp
(
const
char
*
,
const
char
*
);
char
*
strcpy
(
char
*
__restrict
,
const
char
*
__restrict
);
size_t
strcspn
(
const
char
*
__restrict
,
const
char
*
__restrict
)
__pure
;
char
*
strdup
(
const
char
*
__restrict
,
struct
malloc_type
*
);
size_t
strlcat
(
char
*
,
const
char
*
,
size_t
);
size_t
strlcpy
(
char
*
,
const
char
*
,
size_t
);
size_t
strlen
(
const
char
*
);
int
strncasecmp
(
const
char
*
,
const
char
*
,
size_t
);
int
strncmp
(
const
char
*
,
const
char
*
,
size_t
);
char
*
strncpy
(
char
*
__restrict
,
const
char
*
__restrict
,
size_t
);
size_t
strnlen
(
const
char
*
,
size_t
);
char
*
strsep
(
char
**
,
const
char
*
delim
);
size_t
strspn
(
const
char
*
,
const
char
*
);
char
*
strstr
(
const
char
*
,
const
char
*
);
int
strvalid
(
const
char
*
,
size_t
);
extern
uint32_t
crc32_tab
[];
static
__inline
uint32_t
crc32_raw
(
const
void
*
buf
,
size_t
size
,
uint32_t
crc
)
{
const
uint8_t
*
p
=
(
const
uint8_t
*
)
buf
;
while
(
size
--
)
crc
=
crc32_tab
[(
crc
^
*
p
++
)
&
0xFF
]
^
(
crc
>>
8
);
return
(
crc
);
}
static
__inline
uint32_t
crc32
(
const
void
*
buf
,
size_t
size
)
{
uint32_t
crc
;
crc
=
crc32_raw
(
buf
,
size
,
~
0U
);
return
(
crc
^
~
0U
);
}
uint32_t
calculate_crc32c
(
uint32_t
crc32c
,
const
unsigned
char
*
buffer
,
unsigned
int
length
);
LIBKERN_INLINE
void
*
memset
(
void
*
,
int
,
size_t
);
#ifdef LIBKERN_BODY
LIBKERN_INLINE
void
*
memset
(
void
*
b
,
int
c
,
size_t
len
)
{
char
*
bb
;
if
(
c
==
0
)
bzero
(
b
,
len
);
else
for
(
bb
=
(
char
*
)
b
;
len
--
;
)
*
bb
++
=
c
;
return
(
b
);
}
#endif
static
__inline
char
*
strchr
(
const
char
*
p
,
int
ch
)
{
return
(
index
(
p
,
ch
));
}
static
__inline
char
*
strrchr
(
const
char
*
p
,
int
ch
)
{
return
(
rindex
(
p
,
ch
));
}
/* fnmatch() return values. */
#define FNM_NOMATCH 1
/* Match failed. */
/* fnmatch() flags. */
#define FNM_NOESCAPE 0x01
/* Disable backslash escaping. */
#define FNM_PATHNAME 0x02
/* Slash must be matched by slash. */
#define FNM_PERIOD 0x04
/* Period must be matched by period. */
#define FNM_LEADING_DIR 0x08
/* Ignore /<tail> after Imatch. */
#define FNM_CASEFOLD 0x10
/* Case insensitive search. */
#define FNM_IGNORECASE FNM_CASEFOLD
#define FNM_FILE_NAME FNM_PATHNAME
#endif
/* !_SYS_LIBKERN_H_ */
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment