Skip to content

Commit 2699a33

Browse files
authored
Merge pull request #819 from sbellem/fix-swap-signing-semver
Fix swap image signing with --git-describe
2 parents 7c98a86 + c98f846 commit 2699a33

File tree

4 files changed

+45
-3
lines changed

4 files changed

+45
-3
lines changed

tools/src/bin/xous-app-uf2.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
6464
.required(false)
6565
.help("Explicit git commit hash for swap nonce (e.g., '0d934e1...'). If not specified, uses git rev-parse HEAD."),
6666
)
67+
.arg(
68+
Arg::with_name("git-describe")
69+
.long("git-describe")
70+
.takes_value(true)
71+
.required(false)
72+
.help("Explicit git describe version for swap signing (e.g., 'v0.10.0-19-g0d934e1'). If not specified, uses git describe."),
73+
)
6774
.get_matches();
6875

6976
let mut process_names = ProcessNames::new();
@@ -125,14 +132,24 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
125132
let private_key = pem::parse(DEV_KEY_PEM)?;
126133

127134
let git_rev = matches.value_of("git-rev");
135+
let semver: Option<[u8; 16]> = if let Some(git_describe_str) = matches.value_of("git-describe") {
136+
Some(
137+
git_describe_str
138+
.parse::<SemVer>()
139+
.expect("git-describe format incorrect")
140+
.into(),
141+
)
142+
} else {
143+
None
144+
};
128145

129146
if matches.is_present("swap") {
130147
let mut swap_buffer = SwapWriter::new();
131148
args.write(&mut swap_buffer)?;
132149

133150
// Create the swap target image and encrypt swap_buffer to it
134151
let mut swap = Cursor::new(Vec::new());
135-
swap_buffer.encrypt_to(&mut swap, &private_key, Some(anti_rollback as usize), git_rev)?;
152+
swap_buffer.encrypt_to(&mut swap, &private_key, Some(anti_rollback as usize), git_rev, semver)?;
136153

137154
// generate a uf2 file
138155
let swap_uf2 = "swap.uf2";

tools/src/bin/xous-create-image.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use std::fs::File;
88
use std::io::Read;
99

1010
use clap::{App, Arg};
11+
use xous_semver::SemVer;
1112
use xous_tools::elf::{read_minielf, read_program};
1213
use xous_tools::sign_image::convert_to_uf2;
1314
use xous_tools::swap_writer::SwapWriter;
@@ -223,6 +224,14 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
223224
.help("Explicit git commit hash for swap nonce (e.g., '0d934e1...'). If not specified, uses git rev-parse HEAD.")
224225
.value_name("commit hash"),
225226
)
227+
.arg(
228+
Arg::with_name("git-describe")
229+
.long("git-describe")
230+
.takes_value(true)
231+
.required(false)
232+
.help("Explicit git describe version for swap signing (e.g., 'v0.10.0-19-g0d934e1'). If not specified, uses git describe.")
233+
.value_name("version"),
234+
)
226235
.get_matches();
227236

228237
let mut ram_config = RamConfig {
@@ -506,6 +515,16 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
506515
}
507516

508517
let git_rev = matches.value_of("git-rev");
518+
let semver: Option<[u8; 16]> = if let Some(git_describe_str) = matches.value_of("git-describe") {
519+
Some(
520+
git_describe_str
521+
.parse::<SemVer>()
522+
.expect("git-describe format incorrect")
523+
.into(),
524+
)
525+
} else {
526+
None
527+
};
509528

510529
if let Some(mut sargs) = swap_args {
511530
let mut swap_buffer = SwapWriter::new();
@@ -519,7 +538,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
519538
let sf = File::create(swap_filename)
520539
.unwrap_or_else(|_| panic!("Couldn't create output file {}", swap_filename));
521540
swap_buffer
522-
.encrypt_to(sf, &swap_pkey, None, git_rev)
541+
.encrypt_to(sf, &swap_pkey, None, git_rev, semver)
523542
.expect("Couldn't flush swap buffer to disk");
524543
} // drop sf, so it closes
525544

tools/src/swap_writer.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ impl SwapWriter {
9393
private_key: &pem::Pem,
9494
anti_rollback_manual: Option<usize>,
9595
git_rev_override: Option<&str>,
96+
semver: Option<[u8; 16]>,
9697
) -> Result<usize>
9798
where
9899
T: Write + Seek,
@@ -141,7 +142,7 @@ impl SwapWriter {
141142
private_key,
142143
false,
143144
&None,
144-
None,
145+
semver,
145146
true,
146147
bao1x_api::signatures::SIGBLOCK_LEN,
147148
Version::Bao1xV1,

xtask/src/builder.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1352,6 +1352,11 @@ impl Builder {
13521352
args.push(git_rev);
13531353
}
13541354

1355+
if let Some(ref git_describe) = self.git_describe {
1356+
args.push("--git-describe");
1357+
args.push(git_describe);
1358+
}
1359+
13551360
let status = Command::new(cargo()).current_dir(project_root()).args(&args).status()?;
13561361

13571362
if !status.success() {

0 commit comments

Comments
 (0)